数字三角形问题

 数字三角形问题

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值