题目描述
给定一个由n行数字组成的数字三角形,设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大;
三角形的第i行有i个数(i=1...n),对于i,j,位置只能走到i+1,j与i+1,j+1位置;
输入
n代表层数,下面是n层;(1<=n<350) (三角形里的数<100);
输出
最大和
样例输入
2 97 11 88
样例输出
185
代码如下:
#include <stdio.h>
#include <stdlib.h>
int n;
int a[101][101];
int d[101][101];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&d[i][j]);
for(int j=1;j<=n;j++)
a[n][j]=d[n][j];
for(int i=n-1;i>=1;i--)
for(int j=1;j<=i;j++)
{
if(a[i+1][j+1]>a[i+1][j])
{
a[i][j]=d[i][j]+a[i+1][j+1];
}
else
a[i][j]=d[i][j]+a[i+1][j];
}
printf("%d",a[1][1]);
printf("\n");
return 0;
}