算法第三章作业
1. 对动态规划算法的理解 动态规划与分治法一样,需要将大问题化小,不同的是分治法往往子问题相互独立,而动态规划子问题有重复,做用分治法的思维去做会出现大量重复计算,增加复杂度。而动态规划重在建表记录已解决的子问题的答案,其步骤为 (1)找出最优解性质,并刻画其结构特征 (2)递归的定义最优值 (3)以自底向上的方式计算最优值 (4)根据计算最优值时得到的信息,构造最优解 2. 编程题1、2的递归方程 3-1 单调递增最长子序列 longest[i]默认值全为1,sequence[i]为序列,则 j从1到i-1 longest[i] = max(longest[i] , longest[j] + 1 ) for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (sequence[i] > sequence[j]) { longest[i] = (longest[i] > longest[j] + 1) ? longest[i] : longest[j] + 1; } } } 3-2 租用游艇问题 rent[i][j]表示直接从i到j的费用初始值leastMoney[1] = 0, leastMoney[2] = rent[1][2]则j从1到i-1leastMoney[i] = max(leastMoney[j]