三角形最大和的问题~~求高手帮忙!
三角形最大和问题Time Limit:1000MS Memory Limit:65536K
Total Submit:79 Accepted:22
Description
现在经常有一些数学问题困扰着小明。有如下一个三角形,
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
小明想求出从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。现在想请你编一个程序实现这个问题。
说明:
(1)每一步可沿左斜线向下或右斜线向下;
(2)1<三角形行数≤100;
(3)三角形中的数字为0,1,...,99。
Input
输入有多个实例。每个测试用例的第一行是三角形的行数n,接下来是n行数字,每行数字的个数由1开始,依次加1。
Output
输出每个测试用例的最大和(整数),每行1个。
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
Source
这是我的代码 有点繁琐 但是我看不出哪儿不对了~求高手们帮我看看~~指出我的错误,谢谢~~
#include <stdio.h>
#define SIZE 10
int max(int x,int y)
{
if(x>y)
return x;
else return y;
}
int main(void)
{
int n,i,j,total,t=1;
scanf("%d",&n);
int a[20][20];
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
scanf("%d",&a[i][j]);
}
total=a[0][0];
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
{
if((a[i+1][j]>a[i+1][j+1])&&a[i+1][j]!=0&&a[i+1][j+1]!=0)
total+=a[i+1][j];
if((a[i+1][j]<a[i+1][j+1])&&a[i+1][j]!=0&&a[i+1][j+1]!=0)
total+=a[i+1][j+1];
if((a[i+1][j]==a[i+1][j+1])&&a[i+1][j]!=0&&a[i+1][j+1]!=0)
{
if((max(a[i+2][j],a[i+2][j+1])>max(a[i+2][j+1],a[i+2][j+2]))&&a[i+2][j]!=0&&a[i+2][j+1]!=0&&a[i+2][j+2]!=0&&a[i+2][j+2]!=0)
total+=a[i+1][j];
else total+=a[i+1][j+1];
}
}
printf("%d",total);
printf("\n");
return 0;
}