视频讲解<<](https://www.bilibili.com/video/av86427339/?spm_id_from=333.788.videocard.10)
https://www.bilibili.com/video/av86427339/?spm_id_from=333.788.videocard.10
ACM题目链接
https://vjudge.net/contest/353904#overview
1贪心
• 贪心选择
• 贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以首先证明问题的一个整体最优解,是从贪心选择开始的,而且作了贪心选择后,原问题简化为一个规模更小的类似子问题。然后,用数学归纳法证明,通过每一步贪心选择,最终可得到问题的一个整体最优解。
• 最优子结构
• 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。
--------------------------------举个栗子-------------------------------
假设有4种硬币,它们的面值分别为2角5分、1角、5分和1分。现在要找给某顾客六角三分钱(当然这里要根据自己的输入)。问怎样找零钱才能使给顾客的硬币个数最少?
一般来说,我们会拿出2个2角5分的硬币,1个1角的硬币和3个1分的硬币交给顾客,共找给顾客6枚硬币。
这种找零钱的基本思想是:每次都选择面值不超过需要找给顾客的钱的最大面值的硬币。以上面找零钱问题来说:选出一个面值不超过6角3分的最大面值硬币2角5分找给顾客,然后还要找3角8分;选出一个面值不超过3角8分的最大面值硬币2角5分找给顾客,然后还要找1角3分;选出一个面值不超过1角3分的最大面值硬币1角找给顾客,然后还要找3分;选出一个面值不超过3分的最大面值硬币1分找给顾客,然后还要找2分;选出一个面值不超过2分的最大面值硬币1分找给顾客,然后还要找1分;最后选出一个面值不超过1分的最大面值硬币1分找给顾客。这种找硬币的方法实际上就是贪心算法。
这里就是贪心算法:这个题目基本思想是先用最大的硬币然后依次往下判断.
现在我们将问题变一下 :
假设有4种硬币,它们的面值分别为2角5分、1角、5分和2分。现在要找给某顾客六角三分钱(当然这里要根据自己的输入)。问怎样找零钱才能使给顾客的硬币个数最少?
这样问题就完全不一样了以为上一个题目有一分的先用最大的最后一定可以凑够你要找的钱(就是你输入的),但是现在没有1分的了,你要是选择较大金额的话可能就会换不开钱,这里就要用动态规划了,我们下面介绍。
2基本动态规划
基本思想
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。
分类
动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。
举例:
线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;
区域动规:石子合并, 加分二叉树,统计单词个数,炮兵布阵等;
树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等;
背包问题:01背包问题,完全背包问题,分组背包问题,二维背包,装箱问题,挤牛奶(同济ACM第1132题)等;
应用实例:
最短路径问题 ,项目管理,网络流优化等;
POJ动态规划题目列表:
容易
1018,1050,1083,1088,1125,1143,1157,1163,1178,1179,1189,1191,1208,1276,1322,1414,1456,1458,1609,1644,1664,1690,1699,1740,1742,1887,1926,1936,1952,1953,1958,1959,1962,1975,1989,2018,2029,2039,2063,2081,2082,2181,2184,2192,2231,2279,2329,2336,2346,2353,2355,2356,2385,2392,2424。
不易:
1019,1037,1080,1112,1141,1170,1192,1239,1655,1695,1707,1733(区间减法加并查集),1737,1837,1850,1920(加强版汉罗塔),1934(全部最长公共子序列),1964(最大矩形面积,O(n*m)算法),2138,2151,2161,2178。
推荐:
1015,1635,1636,1671,1682,1692,1704,1717,1722,1726,1732,1770,1821,1853,1949,2019,2127,2176,2228,2287,2342,2374,2378,2384,2411
下面介绍一下基本的动态规划问题,0 1背包问题还有完全背包,还是再写一篇博客吧。
https://blog.youkuaiyun.com/weixin_43732535/article/details/104187720