数字三角形问题
memory limit: 65536KB time limit: 300MS
accept: 62 submit: 146
Description
给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。
Input
输入的第一行是数字三角形的行数n,1 <= n <= 600。接下来n行是数字三角形各行中的数字。所有数字在0..99之间。
Output
输出一个数:计算出的最大值。
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
usingnamespacestd ;
int Data[605][605];
int M[605][605];
int main()
{
intT = 0 ;
scanf("%d",&T) ;
intk = 1 ;
inti = 1 ;
intj = 1 ;
memset(M,0,sizeof(M));
while(k<=T)
{
for(j=1;j<=k;j++)
{
scanf("%d",&Data[k][j]);
//cout<<"\nData: i: "<<k<<" J:"<<j <<" "<<Data[k][j]<<" ";
}
k++;
}
for( i =T ; i >=1 ; i -- )
for(j =1 ; j <= i ; j++ )
{
if( i ==T )
{
M[i][j] = Data[i][j];
}
else{
inta = M[i+1][j] +Data[i][j];
intb = M[i+1][j+1] +Data[i][j];
a>b ? M[i][j] = a : M[i][j] = b ;
}
// cout<<"\nM: i: "<<i<<" J:"<<j <<" "<<M[i][j]<<" ";
}
cout<<M[1][1]<<endl;
return0 ;
}