上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走)。
如
3
1
1 2
1 2 3 最大和为6
动态规划
#include<stdio.h>
#include"stdafx.h"
int a[100][100];
int max[100][100];
int ma(int a,int b);
int maxsum(int n,int max[100][100])
{
int i,j;
for(i=n-1;i>0;i--)
for(j=0;j<i;j++)
{
max[i-1][j]=ma(max[i][j],max[i][j+1])+max[i-1][j];
}
return max[0][0];
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
printf("%d",maxsum(n,a));
return 0;
}
int ma(int a,int b)
{
return a>b?a:b;
}