时间复杂度n平方
#include<iostream>
using namespace std;
int MaxSum(int r,int j,int N,int D[100][100],int DMemory[100][100])
{
if(DMemory[r][j]!=-1)
{
return DMemory[r][j];
}
if(r==N)
{
DMemory[r][j]=D[r][j];
}
else
{
if(MaxSum(r+1,j,N,D,DMemory)>MaxSum(r+1,j+1,N,D,DMemory))
{
DMemory[r][j]=MaxSum(r+1,j,N,D,DMemory)+D[r][j];
}
else
{
DMemory[r][j]=MaxSum(r+1,j+1,N,D,DMemory)+D[r][j];
}
}
return DMemory[r][j];
}
int main()
{
int D[100][100];
int DMemory[100][100];
int N=0;
cin>>N;
int i=0,j=0;
for(i=0;i<N;i++)
{
for(j=0;j<=i;j++)
{
cin>>D[i][j];
DMemory[i][j]=-1;
}
}
cout<<MaxSum(0,0,N-1,D,DMemory);
/*
for(i=0;i<N;i++)
{
for(j=0;j<=i;j++)
{
cout<<D[i][j];
}
cout<<endl;
}
*/
return 0;
}