题目传送门:https://vjudge.net/problem/HDU-2084
好像没什么解释的 ^-^
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
核心:dp[j] = mpa[i][j] + max(dp[j], dp[j + 1]);
每次找寻和最大的
dp数组(初始为0):
i=5时
下标--> | 1 | 2 | 3 | 4 | 5 |
i=5 | (4,5) | (5,2) | (2,6) | (6,5) | (5,0) |
55 6 6 5
依次来推,得到下表
下标--> | 1 | 2 | 3 | 4 | 5 |
第一轮 i=5 | 5 | 5 | 6 | 6 | 5 |
第二轮 i=4 | 7 | 12 | 10 | 10 | 5 |
第三轮 i=3 | 20 | 13 | 10 | 10 | 5 |
第四轮 i=2 | 23 | 21 | 10 | 10 | 5 |
第五轮 i=1 | 30 | 21 | 10 | 10 | 5 |
完整代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>
#include <set>
#include <map>
using namespace std;
int mpa[105][105];
int dp[105];
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
memset(mpa, 0, sizeof(mpa));
memset(dp, 0, sizeof(dp));
for(int i = 1 ; i <= n; i++)
for(int j = 1; j <= i; j++)
cin >> mpa[i][j];
for(int i = n; i >= 1; i--)
{
for(int j = 1; j <= n; j++)
dp[j] = mpa[i][j] + max(dp[j], dp[j + 1]);
}
cout << dp[1] << endl;
}
return 0;
}