数字三角形
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; }