算法第三章作业

  


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,而不是45674个的问题。后来经过我们的探讨发现,所谓最长单调增的子序列指的是一个数组里从最小数开始的序列。把f数组看成一个栈,在循环的过程中,每个i都会让j1i-1进行遍历,也就是走一遍j之前的所有数字,如果都比他小,那么f数组就输出j所在的位置。反之,如果j存在比它都要小的数,那么推翻之前的从头开始计数。组队编程令人受益匪浅,希望我们能相互促进,共同进步。

 

posted @ 2018-10-29 22:44  灬小小苏灬  阅读(117)  评论(0)    收藏  举报