链接:https://vjudge.net/problem/POJ-1163
题意:
给一个三角形,每次只能从点往下一层左边或者右边走。
求走到最下面一层能得到的最大值。
思路:
dp,每个位置是上方左右中较大的值加上自己。
代码:
#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <queue>
#include <string>
#include <stack>
#include <iterator>
using namespace std;
typedef long long LL;
const int MAXN = 100 + 10;
int a[MAXN][MAXN];
int main()
{
int n;
cin >> n;
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= i;j++)
cin >> a[i][j];
}
int res = 0;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= i;j++)
{
a[i][j] += max(a[i - 1][j], a[i - 1][j - 1]);
res = max(res, a[i][j]);
}
cout << res << endl;
return 0;
}