题目:
思路:
从下面往上面进行dp这样就会比从上面往下面dp少一部找最大值。整体的思路是从第n-1行开始,找a(i,j)的下和右下的最大一个并与a(i,j)相加。入下面代码(不解释)
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[501][501];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
cin>>a[i][j];
}
}
for (int i = n; i >= 1; i--)
{
for (int j = 1; j <= i; j++)
{
a[i][j] += max(a[i + 1][j], a[i + 1][j+1]);
}
}
cout << a[1][1];
return 0;
}