算法第三章作业

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-1
leastMoney[i] = max(leastMoney[j] + rent[j][i], leastMoney[i])
for (int i = 3; i <= n; i++)
{
  leastMoney[i] = rent[1][i];
  for (int j = 1; j < i; j++)
   {
    leastMoney[i]
= (leastMoney[j] + rent[j][i] < leastMoney[i]) ? leastMoney[j] + rent[j][i] : leastMoney[i]; }
}

 


3. 结对编程情况

开始做题的时候对动态规划还有点生疏,列不出递归方程,讨论了一会后才列出了实践题前两题,第三题在课后讨论了,又查了很久的资料后才写出来。这一章确实比较难,要建立好动态规划模型挺费脑,想到方法后就简单了。也感谢队友一起想方法,不然一节课下来前两题都写不完......

posted on 2019-11-04 13:26  Aozaki  阅读(110)  评论(0编辑  收藏  举报