动态规划算法总结

来源:互联网 发布:北大图书馆知乎 编辑:程序博客网 时间:2024/06/06 06:46

        动态规划,是求解决策过程最优化的数学方法,是在处理问题过程中,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解的一种方法,它没有一种确切的解题步骤,它的解决思路是多种多样的。

        这套题里边遇到的dp问题主要有斐波那契数列、最长上升子序列问题、还有就是两种背包的问题。

        斐波那契数列:f(n)=f(n-1)+f(n-2),这个就是著名的斐波那契数列,然后这类问题是整套题做的最爽的一块,因为主要的步骤在公式,一道题会了,整个就会了,非常简单。

        最长上升子序列:就是在一段序列里求出上升是最长一段子序列,解题方式就是用一个数组储存当前选出的最长序列,然后进行比较,如果在有更长的序列,那么替换,否则继续比较,最终输出。这个问题是在前几道是这类的题目,我印象深刻的是一个猴子的。。卡了我好久,一直没搞懂题意,最后搞懂了,也被搞的不想做了。。。

       01背包:公式:f[i, j] = max( f[i-1, j-Wi] + Pi (j >= Wi), f[i-1, j] ),给定价值和体积,求在当前情况下可能得到的最大价值。这种类型所有的题目基本都离不开那个公式,很多解题方法最后也都归结到公式。“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c的背包中”,此时能获得的最大价值就是f[v-c]再加上通过放入第i件物品获得的价值w。这就是01背包问题的解题思路。

       完全背包:一个复杂的01背包问题,我是这么理解的。。这个类型的题我只做了俩,一个还是转换为了01背包去做。。它跟01背包的差别就是在与取几件的问题,其余的解题差不多。

感想:dp的问题,说难很难,一整天没思路,说简单也非常简单,斐波那契数列的问题一小时多点可以刷3道,这套题看的是思路。有思路简单,没思路很难,跟前两套相比变化很大,很锻炼自己,一个不错的体验。

0 0
原创粉丝点击