给定一个数塔从开头走到最下面,求走过数字之和的最大值
#include<bits/stdc++.h>
using namespace std;
int n;
int a[400][400];
int dp[400][400];
int maxa(int i,int j)
{
if(dp[i][j]!=-1)
{
return dp[i][j];
}
if(i==1&&j==1)
{
dp[1][1]=a[1][1];
return a[1][1];
}
dp[i][j]=a[i][j]+max(maxa(i-1,j-1),maxa(i-1,j));
return dp[i][j];
}
int main()
{
cin>>n;
memset(a,0,160000);
memset(dp,-1,160000);
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++)
{
res=max(res,maxa(n,i));
}
cout<<res;
}