算法第3章作业

 

1.对动态规划算法的理解

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。最经常用到的是自底向上地填表由小到大解决问题。

 

2.

编程题一的递归方程:

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

 

编程题二的递归方程:

 

 for(q = d-1;q >=1;q--){
  for(w = q+1 ;w <=d ;w++){
   for(k = q+1; k < w; k++){
    int t = s[q][k]+s[k][w];
    if(t < s[q][w]) s[q][w] = t;
   }
  }
 }

 3.说明结对编程情况

第一道题就是从1->n(由小到大)求出每个长度的单调递增最长子序列,最后自然得出这个序列的最长单调递增子序列。第二道题从矩阵相乘那些得到想法而得出来的。在做编程题时我们一起打代码一起debug,最后得到正确答案,也明白要从例题中举一反三,而不是照搬书本内容。

posted @ 2018-11-04 22:33  苏伟康  阅读(122)  评论(0)    收藏  举报