問題1 你对动态规划算法的理解(2分)
动态规划算法的核心是记住已经求过的解。记住求解的方法有两种:①自顶向下的备忘录法,②自底向上。
动态规划算法是比较难掌握的一类算法,主要难点在于理论部分的设计,设计的步骤如下:
①分析最优解的性质,并刻画其结构特征;②递归地定义最优解;③以自底向上或自顶向下的方法计算出最优值;④根据计算最优值时得到的信息,构造问题的最优解。
最重要的是确定动态规划的三要素,即:①问题的阶段,②每个问题的状态,③从前一个阶段转化到后一个阶段的递推关系。
問題2 分别列出编程题1、2的递归方程(2分)
编程题1:设以i位结尾的单调递增最长子序列的长度为dp[i],则有:dp[i] = max { dp[i], dp[j]+1 } (i<j)。
编程题2:设dp[1][i]为从1到i租用游艇所需的最小费用,则有:dp[1][i] = max { dp[1][i], dp[1][z]+dp[z][i] } (1<z<i)
問題3 说明结对编程情况(2分)
本次结对编程效果较好,两方都有提出相对有建设性的程序设计方式。
且通过使用网站paiza.io(需FQ访问)的代码实时共同编辑功能,可以实现小组两位成员在不同的地方结对编程。