一、动态规划算法的理解
动态规划的算法从某方面来说是一个决策问题。举个例子,小明从起点a要到目的地d,中途可能会经过b1、b2、b3、c1、c2、c3,而经过这些地方的花费不同,小明要如何走才能使得花费最大?
从动态规划的角度讲,如果小明能知道从b到d的最短费用(cost[b][d])再加上cost([a][b])的最小费用,就可以知道他到达终点d的最优解了。而要知道cost[b][d],必须先知道min(cost[c][d])......这样层层递归,把一个大的问题分解为一个个小的问题,而这些小问题又互相依赖,有先后顺序,小问题的最优解又关系到大问题的最终解,这就是从决策方面来讲的一种动态规划。动态规划常常借助二维数组作为表格,来记录一个个小问题的递进,最终得到大问题的答案。
二、编程题1、2的递归方程
1.单调递增最长子序列
假设a[j]表示以第j个数结尾的最长单调递增子序列。
其递归方程为 a[i] = max(a[j] + 1, a[i]) (i >= 1, 0 <= j < i)
2.租用游艇问题
假设cost[i][j]表示从站点i到站点j的最小花费。
cost[i][j] = max(cost[i][j], cost[i][k]+cost[k][j]) (1 <= i < n, i < j <= n, i <= k <= j)
三、结对编程总结
要好好学习动态规划,有点模糊。