数字三角形问题

来源:互联网 发布:ipad看电视最新软件 编辑:程序博客网 时间:2024/05/16 06:36

 数字三角形问题

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


原创粉丝点击