当前位置: 代码迷 >> 综合 >> HDU-2084 数塔取数问题
  详细解决方案

HDU-2084 数塔取数问题

热度:108   发布时间:2023-11-25 09:37:15.0

数塔取数问题

一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。
每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。
5
8 4
3 6 9
7 2 9 5
例子中的最优方案是:5 + 8 + 6 + 9 = 28

Input
输入数据首先包括一个整数T,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

Output
输出最大值

Sample Input
1
4
5
8 4
3 6 9
7 2 9 5

Sample Output
28

动态规划,从下往上,找对于当前一层来说下面一层相邻两个数的最大值,进行累加,对于样例的分析如下,最终输出顶层数值即可

5
8 4
3 6 9
7 2 9 528
23  22
10  15  18
7   2   9   5
#include<iostream>
#include<algorithm>
using namespace std;
int map[510][510];
int main()
{
    int n,i,j,t;cin>>t;while(t--){
    cin>>n;for(i=1;i<=n;i++)for(j=1;j<=i;j++)scanf("%d",&map[i][j]);for(i=n-1;i>=1;i--)for(j=1;j<=i;j++)map[i][j]+=max(map[i+1][j],map[i+1][j+1]);printf("%d\n",map[1][1]);}
}