2017/8/6
1
第五讲
动态规划
(Dynamic programming)
2017/8/6
2
一、经典问题:数塔(1788)
有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。
2017/8/6
3
用暴力的方法,可以吗?
2017/8/6
4
这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30= 1024^3 > 10^9=10亿)。
试想一下:
2017/8/6
5
拒绝暴力,倡导和谐~
2017/8/6
6
从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。
同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。
如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。
结论:自顶向下的分析,自底向上的计算。
考虑一下:
2017/8/6
7
思考:免费馅饼(1789)
2017/8/6
8
如何解决?
请发表见解
2017/8/6
9
打地鼠1791
再思考:
2017/8/6
10
二、经典问题:最长有序子序列
I
0
1
2
3
4
5
6
7
8
Num[I]
1
4
7
2
5
8
3
6
9
05动态规划 来自淘豆网m.daumloan.com转载请标明出处.