终于理解动态规划,最简单运用~

来源:互联网 发布:八叉树算法 js 编辑:程序博客网 时间:2024/06/05 02:15

最近在看算法,被各种概念困扰。这块骨头很难啃 啊,在看《算法竞赛入门经典》的过程中,在看动态规划,它是把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。

我一直不能深刻理解它的意思,然后我再网上找例子,突然通过《算法竞赛入门经典》书里的一句话就是:记录状态和状态转移。

看这个例子,这个三角形,从上到下,寻找最长的值。

[     [2],    [3,4],   [6,5,7],  [4,1,8,3]]

输入

2

3 4

6 5 7

4 1 8 3 

输出:

21


动态规划就是记录状态的变化过程,状态的记录为

21

16 19

10 13 15

4   1    8   3

也就是说,将下一层的数字中最邻近的取较大值+自己。局部的取最大值,然后全局取最大值。

#include<stdio.h>int sta[4][4];int num[4][4];int main(int argc, char const *argv[]){int i,j;for ( i = 0; i < 4; ++i){for (j = 0; j < i+1; ++j){scanf("%d",&num[i][j]);}}for ( i = 0; i < 4; ++i){sta[3][i]=num[3][i];}for ( i = 2; i >= 0; --i){for (j = 0; j < i+1; ++j){sta[i][j]=sta[i+1][j]>sta[i+1][j+1]?sta[i+1][j]:sta[i+1][j+1];sta[i][j]+=num[i][j];}}printf("%d\n",sta[0][0]);return 0;}


0 0
原创粉丝点击