标签:
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
硬币问题:
有n种硬币,面值分别为V1, V2, V3,……,Vn,每种面值的硬币有无限个,使得面值之和恰好为S,输出硬币数目的最大值和最小值。——固定终点的最长路和最短路
有向无环图为DAG ( Directed Acyclic Graph)
http://sotong.sec.samsung.net/sotong/practice/practiceProbView.do?practiceProbId=AUh3hAH1BFHVldFk
万能的模板:
http://www.cnblogs.com/qiufeihai/archive/2012/09/11/2680840.html
标签:
原文地址:http://www.cnblogs.com/monkeyvera/p/4381661.html