动态的数字三角形 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
一个数字组成的三角形,有n行,第i行有i个数。从第一个数开始,每次可以往左下或右下走一格,直到走到最后一行,把沿途经过的数全部加起来。如何走才能得到最大的和? |
输入
|
第一行:n,表示这个三角形共有n行
第二至n+1行:依次为这个数字三角形各行的数据(按顺序输入),两数之间有一个空格分隔。 |
输出
|
一个数,表示最大的和
|
输入示例
|
4
1 3 2 4 10 1 4 3 2 20 |
输出示例
|
24
|
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 #define MAXN 1000 5 int n,i,j,a[MAXN][MAXN]; 6 int main() 7 { 8 scanf("%d",&n); 9 for(i=1;i<=n;i++) 10 for(j=1;j<=i;j++)scanf("%d",&a[i][j]); 11 for(i=n-1;i>=1;i--) 12 for(j=1;j<=i;j++)a[i][j]=max(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]); 13 printf("%d ",a[1][1]); 14 return 0; 15 }