您的位置:首页 > 其它

POJ1163 The Triangle

2014-11-29 13:31 381 查看
这是一道很简单的动态规划的题目,就是求三角形从上至下的一条最长路径之和,每次都只能选择自己右下或者左下的两个点来走

刚开始输入一个N 表示是一个直角边长为 N的三角形

要求第一行到最底下的最长路径,就得知道从第二行到最底下的最长路径,故依次类推,推导到最后一行,实际上就成了一个递归

当在最后一行的时候就是maxsum[i][j]=D[i][j],其余的则是maxsum[i][j] =max(maxsum[i+1][j],maxsum[i+1][j+1])+D[i][j]

实际上这样还是太浪费空间,如果不用二维数组,我直接用一个一维数组来保存没行的最大值maxsum[j]=max(maxsum[j],maxsum[j+1])+D[i][j]

最后输出的值为maxsum[1] .

输入

5

7

3 8

8 1 0

2 7 4 4

45265

输出

30

#include<stdio.h>
const int max=101;
int MAX(int a,int b )
{
return a>b?a:b;
}
int main()
{
int d[max][max],n;
int *maxsum;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&d[i][j]);
maxsum=d
;
for(int i=n-1;i>=1;i--)
for(int j=1;j<=i;j++)
maxsum[j]=MAX(maxsum[j],maxsum[j+1])+d[i][j];
printf("%d\n",maxsum[1]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: