动态规划可以由递归做出来这个题目,但是时间复杂度太大,所以用从下而上分析二维数组做出这个题目。
#include<iostream>
#include<string>
#include<stdio.h>
#include<algorithm>
int a[101][101];
int maxsum[101][101];
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<i+1;j++)
{
cin >> a[i][j];
}
for(int i=0;i<n;i++)
{
maxsum[n-1][i]=a[n-1][i];
}
for(int i=n-2; i>=0; i--)
{
for(int j=0 ; j<=i ; j++ )
{
maxsum[i][j] = max(maxsum[i+1][j], maxsum[i+1][j+1]) + a[i][j];
}
}
cout << maxsum[0][0] <<endl;
return 0;
}