关闭

数字三角形问题

标签: 动态规划经典
112人阅读 评论(0) 收藏 举报
分类:

方法一:

  递归:

  代码如下:

         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]);

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3997次
    • 积分:463
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条
    文章分类