哪些问题可以使用动态规划?
1.最优子结构(必须):子问题的最优解有助于求得总问题的最优解
2.子问题重叠(最好有):就拿斐波那契来说,存储了F(3) 和 F(2),就可以自动得到F(4). 不需要再求F(4)
3.无后效性(必须):F(4)只需要F(3)和F(2)的值,不需要F(6)的值。
每一次求当前状态的时候,都和前面有关系。后面都是未解的。只和前面有关系。
1.状态:
dp[i]:从原点到节点的最短路径
2.阶段:
拓扑序(这个节点所需要的前节点都已经求解完毕):按照拓扑顺序来划分阶段
3.决策:
选择(eg. 最大值,最小值,求和)
dp[i] = min[dp[i]+w[i,j]
状态转移方程怎么找:
搞清这个状态的前一个状态怎么过来(往上找一步)
4.初始化(第一个点的初值必须给我们)
dp[i] = 0
5.求解目标