算法第三张作业
1. 你对动态规划算法的理解
我觉得动态规划算法其实与分治法有很多相似之处,都是先要将问题分解成子问题再进行解决,而动态规划更多是子问题之间有联系,一个子问题的解决有可能需要依赖其他子问题,而要解决整个问题需要先分析找出子问题的联系然后写出递归方程,最后再填表或者用递归方法求解。动态规划算法运用到了最优子结构的性质。
2. 分别列出编程题1、2的递归方程
1. b[i] = 1 , 0 <= i < n(赋初始值) (b[i]表示第i项单调递增子序列长度)
b[i] = max(b[j]+1, b[i]) a[i]>a[j] 且 0 <= j < i - 1(对于第i项之前的每一项都要比较,取多次比较后的最大值)
2.b[j][j + i] 表示以第j站为起点,到相差为i的出租站的最少租金(b[1][1 + 1]即b[1][2]表示从第一站到相差一站的站点,即第二站的最低租金)
b[j][j + i] = a[j][j + i],(赋初始值)
b[j][j + i] = a[j][j + i], i = 1(相差一站时只有一种情况)
b[j][j + i] = min(b[j][k] + b[k][j+i], b[j][j + i]) ,i > 1 且 j < k < j + i (利用最优子结构性质可知从j站到j + i站最多只能中转一次,设第k站为中转站,取多次比较后的最小值)
3. 说明结对编程情况
结对编程时我们都是先自己打完代码,然后发现有不懂的地方就互相询问,或者得出不同答案时一起探索找出其中一个的错误。