读书人

AL029 数字三角形有关问题

发布时间: 2012-12-29 10:28:09 作者: rapoo

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 ;}

读书人网 >其他相关

热点推荐