动态规划dp 史诗级入门篇【flag】

来源:互联网 发布:鬼才电影 知乎 编辑:程序博客网 时间:2024/06/16 10:19

引子

动态规划???传说中的动态规划???动态规划不是一个独立的算法,是一种思想…………算了算了,我闭嘴,说多了就听不懂了

故事引入

从前有个富裕的国家,叫做大犬帝国。国民虽然很有钱,但是都很诚实,对大犬帝国的首相很忠诚,对犬王很敬仰;劳动兢兢业业……终于有一天,天道酬勤,大犬帝国国民在自己的国土上发现了十座金矿,并且这十座金矿排在一条直线上。听到了这个消息,大犬帝国的首相很高兴,决定把金子都挖出来造福国民,打败猫国,壮大犬国,创建犬国主导的和谐世界。但是最终,由于猫国百般阻挠,只招募到了10000大犬帝国勇士志愿者来挖金子,由于人手不足所以大犬帝国首相派遣手下去侦察一下,每个金矿的金子量和需要的人力。
首相来到了第十个金矿,把军政大臣和犬王叫了过来,问了问情况,发现这个金矿需要1000条犬,能挖出10000两金子。首相叫来了军政大臣,问他:“你现在去帮我算算,除了这第十个金矿,其他的九个金矿,用9000条犬可以挖多少金子,再加上10000两金子,把最后答案告诉我。”然后军政大臣遵从了首相的命令,去了第九个金矿;然后叫来了犬王,问他:“你现在去帮我算算,除了第十个金矿,其他的九个金矿,用10000条犬可以挖出多少金子,然后把答案告诉我。”然后犬王也去了第九个金矿,和军政大臣碰面后,军政大臣和犬王猛然领悟,懂得了首相这样做的原因…………
同学们你们猜,军政大臣和犬王接下来会怎么做。
正解
军政大臣和犬王调查清楚了,第九个金矿需要2000条犬,挖出25000两金子,然后军政大臣叫来两个手下,跟其中一个说:“你给我算算,如果第一个金矿到第八个金矿,给你7000条犬,你可以挖出多少金子。”,跟另外一个说:“你给我算算,如果第一个金矿到第八个金矿,我给你9000条犬,你可以挖出多少金子。”……………………
这就是动态规划的一种很经典很基本的类型——01背包问题。基本上可以概括了dp的最基本思想——记忆化搜索和递推。

基本思想

可以用动态规划解决的问题,有一个特点:这个问题能分割成连续的几个阶段,每一个阶段我们可以塑造一个子问题来解决它。
状态:状态就是执行完一个阶段,解决完一个阶段的子问题后存在的情况。
状态转移方程:状态转移方程就是在状态和状态之间进行转移的方式(就是递推思想的体现)
…………算了我闭嘴,这种东西讲不讲都没关系

例题

数字三角形

luoguP1216 数字三角形 题解by柴犬首相

导弹拦截

luoguP1020 导弹拦截 题解by柴犬首相

挖地雷

luoguP2196 挖地雷 题解by柴犬首相

友好城市

luoguP2782 友好城市 题解by柴犬首相

合唱队形

luoguP1091 合唱队形 题解by柴犬首相

最长公共子序列

luoguP3402最长公共子序列
立下一个flag:本题我采用基本dp思路只拿了四十分,剩下六十分全部tle,,,我拿到全分了再写题解。

another flag 请等待dp第二篇——背包问题2017/9/27 20:47立。

原创粉丝点击