数字三角形

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

30

#include<stdio.h>
#include<iostream>
using namespace std;
#define MAX 601
int tri[MAX][MAX];
int triangle(int n){
    int i,j;
    for(i=n-2;i>=0;i--)
        for(j=0;j<=i;j++)
            if(tri[i+1][j]>tri[i+1][j+1])
                tri[i][j]+=tri[i+1][j];
            else tri[i][j]+=tri[i+1][j+1];
    return tri[0][0];
}
int main(){
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++)
        cin >> tri[i][j];
    }
    cout << triangle(n) <<endl;
}

 

posted @ 2018-01-08 16:03  的川  阅读(212)  评论(0编辑  收藏  举报