问题描述:
给定一个有n行数字组成的数字三角形,如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字和最大.
#include<stdio.h>
void main()
{
int a[50][50][3],i,j,n;
scanf("%d",&n); //n 行数
for(i=1;i<=n;i++) //第i行,第j个元素。 a[i][j][1]为原图的数字, ai[i][j][2]为从下面走到a[i][j]点的最大路程
for(j=1;j<=i;j++) // a[i][j][3] 标记向左向右走
{
scanf("%d",&a[i][j][1]);
a[i][j][2]=a[i][j][1]; //第二层初始化得和第一层一样
a[i][j][3]=0; //第三层初始化为0
}
for(i=n-1;i>=1;i--) //从最下面一行往上
for(j=1;j<=i;j++)
if(a[i+1][j][2]>a[i+1][j+1][2])
{
a[i][j][2]=a[i][j][2]+a[i+1][j][2];
a[i][j][3]=0;
}
else
{
a[i][j][2]=a[i][j][2]+a[i+1][j+1][2];
a[i][j][3]=1;
}
printf("max=%d\n",a[1][1][2]); //输出数字和最大值
j=1;
for(i=1;i<=n-1;i++)
{
printf("%d\n",a[i][j][1],"->"); //输出路径,以箭头连接
j=j+a[i][j][3];
}
printf("%d\n",a[n][j][1]); //最后头一个不是箭头结尾
}