算法第三章作业
1、对动态规划算法的理解
动态规划算法要求我们找出题目中的最优解的性质,并且递归的定义最优值,根据递归式自下而上的解决问题。这个算法和分治法类似,将问题分成不同的子问题,再从子问题中得到原问题的解。动态规划算法不同于分治法的地方是,分治法会重复计算子问题,而动态规划会设置备忘录来简化计算。
2、
编程题1的递归方程:
dp[i] = max(dp[j]+1, dp[i]);
编程题2的递归方程:
i==n, dp[i] = 0;
i<n, dp[i] = min{ r[i][k] + dp[k] }, i<k<=n;
3、结对编程情况
我编好程序以后卢涵检查时提出为什么数组456712输出的只有2,而不是4567的4个的问题。后来经过我们的探讨发现,所谓最长单调增的子序列指的是一个数组里从最小数开始的序列。把f数组看成一个栈,在循环的过程中,每个i都会让j从1—i-1进行遍历,也就是走一遍j之前的所有数字,如果都比他小,那么f数组就输出j所在的位置。反之,如果j存在比它都要小的数,那么推翻之前的从头开始计数。组队编程令人受益匪浅,希望我们能相互促进,共同进步。
浙公网安备 33010602011771号