第三章作业

大憨熊 提交于 2019-12-03 10:10:34

一、动态规划算法的理解

   动态规划的算法从某方面来说是一个决策问题。举个例子,小明从起点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)

三、结对编程总结

要好好学习动态规划,有点模糊。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!