不能傻傻的用普通递归:会超时,因为有大量的重复计算。
需要改进,每个结果一旦算出来就存起来,下次需要用的时候就直接调用。
改进成为记忆递归型动归程序:
# include <iostream>
# include <algorithm>
using namespcae std;
#define MAX 101
int D[MAX][MAX];
int n;
int MaxSum(int i, int j)
{
if(maxSum[i][j]!=-1)
{
return MaxSum(i,j);
}
if(i==n)
{ maxSum[i][j]=D[i][j];
}
else{
int x = MaxSum(i+1,j);
int y = MaxSum(i+1,j+1)
maxSum[i][j] = max(x,y)+D[i][j];
}
return maxSum[i][j];
}
int main()
{
int i,j
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
cin>>D[i][j];
maxSum[i][j]=-1;
}
}
cout<<MaxSum(1,1,)<<endl;
}