昨天晚上,专题三结题了。今天做个总结,为这一个月来所学所获说说心得。可能不会多深刻,但是作为一个新手,总结是对这一段时间的反思。
查了查动态规划定义:是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题。
动态规划的问题有很多,在课堂上我们到现在学了简单dp,背包问题以及区间dp。但是我查了查关于动态规划还有很多,比如:LIS(最长递增序列),LCS(最长公共子序列)等,这些在课堂上我们并没有接触,所以应该学习的还有很多,不能只是依赖课堂,更多的应该是自学。
简单的dp:
主要是思路比较简单,形式比较好表示,比如斐波拉契数列递推:f[2]=1,f[1]=1,f[i]=f[i-1]+f[i-2](i>=3),这样的一个递推就很容易解决了。所以简单的dp,要点就是找规律,看清形式,并用递推公式。
背包:
背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题需要枚举每种状态,但是可以通过动态规划减少枚举的次数,提高效率,主要思想是每次都利用前面得到的状态进行转移得到当前的状态。这类问题很少能用贪心的,首先,贪心很难证明策略是否正确,其次贪心必定使得枚举量大量减少,会导致结果错误。(引用博文:http://blog.csdn.net/woshi250hua/article/details/7636866)
区间dp:
区间dp,一般是枚举区间,把区间分成左右两部分,然后求出左右区间再合并。比如课上讲的回文串,就是很典型的区间dp。
求解区间dp,我觉得最难的就是怎么找准状态转移方程,只要状态转移方程找到了,核心也就有了,整个题目基本也就结束了,其他的就是细节了。
推荐一篇大神的博客(http://blog.csdn.net/woshi250hua/article/details/7969225)
最后:仔细阅读题目,找找准核心(状态转移方程),注意细节。祝下次再接再厉。