首页 > 其他 > 详细

动态规划学习

时间:2015-03-31 19:58:43      阅读:213      评论:0      收藏:0      [点我收藏+]

数字三角形问题

http://sotong.sec.samsung.net/sotong/practice/practiceProbView.do?practiceProbId=AUkG9ZnV1GXVldGG

 

把位置(i,j)看成一个状态,然后定义状态(i,j)的指标函数d(i,j):从位置(i,j)出发时能得到的最大和。

递推计算:

int i,j;

//边界值处理

for(j=1;j<=N;j++)

         result[N][j] = data[N][j];

 

//由下向上动态规划,保存叶子节点到当前节点的最大值

for(i=N-1; i>=1;i--)

         for(j = 1; j<=i; j++)

                   result[i][j] =data[i][j]+max(result[i+1][j],result[i+1][j+1])

 

记忆化搜索:

memset(result,-1,sizeof(result))

 

int solve(int i, int j)

{

         //判断result[i][j] >= 0,判断该节点是否已经被计算过

if(result[i][j] >= 0)

         return result[i][j];

 

return result[i][j] = data[i][j] + (i==N?0:max(solve(i+1,j),solve(i+1,j+1)));

}

 

Sotong类似题目:

http://sotong.sec.samsung.net/sotong/practice/practiceProbView.do?practiceProbId=AUWlrlNFQzfVldEJ

 

动态规划(DP)

硬币问题:

有n种硬币,面值分别为V1, V2, V3,……,Vn,每种面值的硬币有无限个,使得面值之和恰好为S,输出硬币数目的最大值和最小值。——固定终点的最长路和最短路

 

有向无环图为DAG ( Directed Acyclic Graph)

BFS

http://sotong.sec.samsung.net/sotong/practice/practiceProbView.do?practiceProbId=AUh3hAH1BFHVldFk

 

万能的模板:

 

推荐网址:

http://poj.org/

http://www.cnblogs.com/qiufeihai/archive/2012/09/11/2680840.html

 

动态规划学习

原文:http://www.cnblogs.com/monkeyvera/p/4381661.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!