第三章作业

你对动态规划算法的理解

      动态规划其实与分治法相似,区别在于子问题重叠上,如何避免因子问题重叠而产生的大量无效的运算。对此,一般我们都是整个表来填,根据表还查看已经计算过的子问题结果就可以了。填表是门学问,当然对于我来说,找出最优解的性质也很难。动态规划一般用递归来做省力,所以可以不用动态规划的时候尽量不要用,麻烦。动态规划有以下四个常见步骤:找出最优解的性质,并刻画其结构特征;递归的定义最优值;以自底向上的方式计算出最优值;根据计算最优值时得到的信息,构造最优解。

分别列出编程题1、2的递归方程

    (1):单调递增最长子序列

 for(int i=0;i<=n;i++){
  c[i][0]=0;
  c[0][i]=0;
 }
 for(int i=1;i<=n;i++)
  for(int j=1;j<=n;j++){
   if(b[i-1]==a[j-1])
    c[i][j]=c[i-1][j-1]+1;
   else if(c[i-1][j]>=c[i][j-1])
    c[i][j]=c[i-1][j];
   else
    c[i][j]=c[i][j-1]; 
  }

(2):租用游艇问题

int cost[n];
 cost[1]=0;
 for(int i=2;i<=n;i++){
  cost[i]=c[1][i];
  for(int j=2;j<i;j++){
  cost[i]=min(cost[j]+c[j][i],cost[i]); 
  } 
 }

说明结对编程情况

这次结对编程中,我明显赶不上我搭档的思考速度,我对动态规划的思想掌握的没有她好。想法也和她不太一样,对此磨了一会儿时间。其他都好。

posted @ 2018-11-11 18:40  GYRY  阅读(73)  评论(0编辑  收藏  举报