简单动态规划---动态的数字三角形

动态的数字三角形
难度级别: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\n",a[1][1]);
14     return 0;
15 }
View Code

 

posted @ 2016-04-25 20:41  wxjor  阅读(273)  评论(0编辑  收藏  举报