您的位置:首页 > 其它

51nod 1002 数塔取数问题

2017-04-17 19:01 183 查看
1002 数塔取数问题


基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题


 收藏


 关注

一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。
每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。

   5
  8 4
 3 6 9
7 2 9 5

例子中的最优方案是:5 + 8 + 6 + 9 = 28

Input
第1行:N,N为数塔的高度。(2 <= N <= 500)
第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数......第k+1行k个数。数与数之间用空格分隔(0 <= A[i] <= 10^5) 。


Output
输出最大值


Input示例
4
5
8 4
3 6 9
7 2 9 5


Output示例

28

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 500 + 10;
int a[maxn][maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
{
scanf("%d",&a[i][j]);
}
a[0][0] = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
{
if(j == 1)
a[i][j] += a[i-1][j];
else if(j == i)
a[i][j] += a[i-1][j-1];
else
{
a[i][j] += max(a[i-1][j],a[i-1][j-1]);
}
}
int Max = 0;
for(int i = 1; i <= n; i++)
Max = max(Max,a
[i]);
printf("%d\n",Max);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: