题意:
一个数塔,从上到下只能走相邻的点即在一个三角形区域内,问从上到下最大的和是多少?
输入:
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
输出:
30
分析:
简单dp,就是一个数塔,可以用一维数组节省空间。
状态转移方程:dp[i][j] = a[i][j] + max( dp[i+1][j], dp[i+1][j+1])
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
int N;
int a[500][500];
cin >>N;
for(int i=1;i<=N;i++)
{
for(int j=0;j<i;j++)
{
cin >>a[i][j];
}
}
for(int i=N-1;i>=1;i--)
{
for(int j=0;j<N;j++)
{
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
}
}
cout <<a[1][0]<<endl;
return 0;
}