AL029 数字三角形问题
AL029 数字三角形问题
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>usingnamespace std ;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 ;}