今天终于又在联赛提高组中遇到动态规划(Dynamic program)了,~~(><) ~~ ,在各种算法中,稍微掌握得好一点的一块。O(∩∩)O~。侥幸在四人组中拿到头魁,(李兄的强项在AVL树, 红黑树 ,线段树,伸展树, 跳跃表,单调队列,最近公共祖先,倍增,后缀自动机,ac自动机等等高端的应用上,简单动态规划有些薄弱,【但是树形dp,状压dp又超级强,看不懂他】今天勉强打败他,在此分享李兄的博客地址http://blog.csdn.net/lycheng1215)
拿到动态规划,第一步,分解问题。注意单纯的递归往往会导致子问题被重复计算,用动态规划的方法,子问题的解一旦求出就要被保存,所以每个子问题只需求解一次。子问题经常和原问题形式相似,有时甚至完全一样,只不过规模从原来的n 变成了n-1,或从原来的n×m 变成了n×(m-1) ……等等。这道题就是依次找到在子串A的n-1位置,有多少种方案可以使得这个找出的新串与字符串 B 相等。对B的话,也有子问题,那就是到B得j-1位置的时候,在i中能提取多少出来。
找到子问题,就意味着找到了将整个问题逐渐分解的办法。 分解下去,直到最底层规模最小的的子问题可以一目了然地看出解。最小子问题就是到1位置,有多少种方案,显然长度小于B串的话,这里是0。
用动态规划解题时,将和子问题相关的各个变量的一
noip2015 子串(心得体会)
最新推荐文章于 2024-08-10 14:10:08 发布
本文通过noip2015一道动态规划题目,分享了动态规划的解题思路和技巧,包括问题分解、避免子问题重复计算、状态定义、状态转移方程以及滚动数组的空间优化策略。作者通过实例解析了动态规划在字符串匹配中的应用,并提到在解决规模较大的问题时,滚动数组的重要性。
摘要由CSDN通过智能技术生成