方法一:
递归:
代码如下:
int solve(int i,int j){
return a[i][j]+(i==n?0:max(solve(i+1,j),solve(i+1,j+1))) //效率太低,起原因在于重复计算
}
方法2:
递推计算:
代码如下:
int i,j;
for(int j=1;j<=n;j++) d[n][j]=a[n][j];
for(int i=n-1;i>+1;i++)
for(int j=1;j<i;j++){
d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);
}
方法3:
记忆化搜索:在递归的思想上加以优化,不会出现重复计算
代码如下:
memset(d,-1,sizeod(d));//将d[ ] 初始化为-1
int solve(int i;int j){
if(d[i][j]>=0) return d[i][j]; //已求
return d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);
}