动态规划算法
- 使用条件:在问题可分解为独立且离散的子问题时可采用动态规划来解决。
- 通用小贴士:
- 每种动态规划都涉及网格。
- 单元格中的值就是你要优化的值。
- 每个人单元格都是一个子问题,因此你应考虑如何将问题分成子问题。有助于找出网格的坐标轴。
- 举例
- 请绘制并填充用来计算choose和choice最长公共字串的网格
回答以下问题:
-
单元格中的值是什么-通常是你要优化的值,这里是两个字符串都包含的最长字串的长度
-
如何将这个问题划分为子问题-比较字符串的字串
-
网格的坐标轴是什么-因为每个单元格都将包含这两个字串的最长公共字串的长度,所以坐标轴为单词
-
填充网格的公式-1. 如果两个字母不相同,值为0;如果相同,值为左上角邻居的值加1。
c h o o s e c 1 0 0 0 0 0 h 0 2 0 0 0 0 o 0 0 3 1 0 0 i 0 0 0 0 0 0 c 1 0 0 0 0 0 e 0 0 0 0 0 1 -
约束条件下的最优解举例
每个单元格的计算公式:当前单元格的价值=两者中较大的那个(上一个单元格的值or当前商品价值+剩余空间的最大价值)
假设你要去野营,你有一个容量为6的背包,需要决定该携带下面的哪些东西,其中每样东西都有相应的价值,价值越大意味着越重要。
- 水(重3,价值为10)
- 书(重1,价值为3)
- 食物(重2,价值为9)
- 夹克(重2,价值为5)
- 相机(重1,价值为6)
物品/重量 1 2 3 4 5 6 水 0 0 10 10 10 10 书 3 3 10 13 13 13 食物 3 9 12 12 19 22 夹克 3 9 12 14 19 22 相机 6 9 15 18 20 25 最大值25=6(相机)+19(9(食物)+10(水))
所以带:相机,食物,水
-