算法第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,最后得到正确答案,也明白要从例题中举一反三,而不是照搬书本内容。

浙公网安备 33010602011771号