动态规划 (一)

对于动态规划的学习总共进行了两节课,到现在为止还是一头雾水,虽然看懂了老师上课讲的例题,但是做V judge的时候还是都不太会,我主要认为我只知道了动态规划的基本思想,就是将一个大的问题,分成若干个小问题,但与贪心算法不同的是,动态规划中的每一个小问题之间都相互影响,在每一步都取得最优解,且在不断的影响找出每一个阶段的最优解,最终得出最优的答案。

动态规划一般的解题步骤:

  1. 判断该问题是否可以通过动态规划的思想来解决,也就是所说的是否具备最优子结构。
  2. 把问题分成若干个小问题。
  3. 建立动态转移方程。(通常使用循环加一维或二维数组形式)
  4. 找出边界条件。
  5. 将已知边界初值带入。(此时递推方程已经具备)
  6. 递推求解。

动态规划的基本题型就目前我主要找到了以下几种。

  1. 吃金币、滑雪问题
    这两个例题都是非常简单的题目,递推方程十分简单,通过定义一个二维数组来储存在每一步的结果(金币数、距离),通过max函数判断走向,定义初始位置,递推,得出最终位置,十分的好理解!(这是最友好的题目,嘿嘿嘿)

  2. 求最长上升子序列
    这个动态规划的思想也非常明显,已知第一个数的和是1,然后其中的递推关系就是通过判断第二个数与第三个数之间的大小关系,看子列和数是否加1,这样就已知了第二个数前的最长子列和,就这样通过递推关系,利用二重循环与数组,最终我们就得到了每一个数的最长子列和的数组。最后得出结果即可。

  3. 背包问题
    也是最近做题遇到的,提前看了老师的课件也知道了其中的原理,但是使用的还是不是那么顺畅。通过判断最终时候的背包容量是否可以装下一件物品位起始点,通过增加物品的质量与的得到的价值位递推关系,最终得到结果,还需要听老师上课讲hhh

总体来说,到了现在,动态规划还是迷迷糊糊的,看到别人都AC了那么多题心里也是非常着急,因为感觉自己还是不懂,因为搜索答案的时候看解析也不懂代码的意思,有的时候看懂了代码自己运用的时候也是根本不会,希望在这后半周(4月3日)之前,能把动态规划给学懂,能和贪心算法一样尽可能的把题都做完。

发布了90 篇原创文章 · 获赞 15 · 访问量 3160

猜你喜欢

转载自blog.csdn.net/qq_43656233/article/details/88855430
今日推荐