动态规划(总结)

例子:

数字三角形问题

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

从顶部向下走,每次只能走下面或者右下,走完全程,问你怎么走使得权值最大

具体做法:

1.分析问题的最优解,找出最优解的性质,并刻画其结构特征:

问题的最优解:所有走法中最大的权值是多少?

最优解的性质和结构特征:只能向正下或者右下走,每走一行的最大权值等于前面一行的最大权值加上这一

行的走的两个方向中的最大值

2.递归的定义最优值:

要找到从0行出发的最优值,就要找到从第1行出发的最优值

要找到从1行出发的最优值,就要找到从第2行出发的最优值

………………………

要找到第3行出发的最优值,就要找到从最后一行出发的最优值

题目要你求从0行出发的最优值,那么我们就是要找到从第一行出发的最优值,加上第0行到第1行的最优值

但是,很重要的一点,我们需要递归求解,要先求解从倒数第一行出发的最优值,然后根据从倒数第一行出

发的最优值求出从倒数第二行出发的最优值

3.采用自底向上的方式计算问题的最优值

4.根据计算最优值时间得到的信息,构造最优解

这个就是问你具体是怎么走的,我们需要在求解子问题的时候保存一些信息,采用构造出最优解(最优值和

最优解是不同的,最优值在本问题中是一个走法中权值之和最大的那一个,而最优解是具体的走法

解法:

dp【i】【j】:代表从第i行第j列出发得到的最优值

dp【i】【j】=max(dp【i+1】【j】,dp【i+1】【j+1】)+a【i】【j】

表示从第i行第j列出发的最优值等于到i+1行的两种走法中最大的那一个加上出发点的权值

来自:《算法竞赛入门经典》
转载:https://blog.csdn.net/qq_39382769/article/details/80788294 

https://blog.csdn.net/u013309870/article/details/75193592

猜你喜欢

转载自blog.csdn.net/qq_42458302/article/details/88384675
今日推荐