码迷,mamicode.com
首页 >  
搜索关键字:动态规划    ( 6061个结果
Manacher算法--O(n)内求回文子串
昨天做了leetcode里的     Longest Palindromic Substring ,一开始用动态规划O(N^2),不管怎么改都超时了。。。于是在大神的帮助下,找到了传说中的Manacher算法,居然能在O(n)内求出来,瞬间给跪了。 本屌认为,这个算法主要是充分的利用了以前的匹配的结果,来起到了降低时间复杂度的作用,这点跟KMP算是有点类似。在预处理时有个小技巧就是将第0,1为设...
分类:其他好文   时间:2014-06-20 12:15:22    阅读次数:305
c2java 动态规划之模糊匹配
字符串匹配 精确: indexOf(String str); -- strstr(), O(mn)。 lastIndexOf(String str); -- continue 的别样用法。 matches(String regex); -- Regex.compile()/match()。 模糊:  java package?  Spell Checker -- 两个字符串的相似程度...
分类:编程语言   时间:2014-06-20 11:00:18    阅读次数:287
女神就是女神……cdq
女神涉及的范围岂是吾们渣渣可以揣测到的?《基于连通性状态压缩的动态规划问题》 —— 插头dp《从《Cash》谈一类分治算法的应用》 —— cdq分治《弦图与区间图》等等等等。。Orz,渣渣还要更加努力。。
分类:其他好文   时间:2014-06-13 14:22:23    阅读次数:192
利用递归和动态规划来求解组合数
组合数定义:从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。 下面是一种比较通俗的计算公式: 其递归公式为: c(n,m)=c(n-1,m-1)+c(n-1,m) 下面是c++实现该递归算法: #include #include #d...
分类:其他好文   时间:2014-06-08 18:06:03    阅读次数:672
[LeetCode] Palindrome Partitioning II [12]
题目:For example, given s = "aab", Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut 解题思路:给一个字符串,如果字符串可以划分成若干子回文字符串,返回最小的划分数量。 这个题如果还用之前求所有划分组合的循环加递归方法的话,就会得到超时的错误。这是就要考虑别的方法,动态规划倒是一个不错的方法,但是动态规划最重要的是要找到动态方程。本题的动态方程: dp[i] =...
分类:其他好文   时间:2014-06-08 14:56:58    阅读次数:257
1393 - Highways 计数问题
本题是思想挺难的题目,抽象思维要求挺高的。 使用动态规划法,首先要弄明白如何记录数据,并且明白记录的数据代表什么意义,否则是理解不了的。 这里也只是给出自己的理解,也许别人不一定能理解我为什么这样理解的。不过给出图,详细说明一下,希望我可以说清楚。 这里需要使用双重动态规划法了,首先定义第一个表tbl 这个表的数值,例如tbl[i][j]代表,从第一个点[1][1]到[i][j]点组成的(i-1) * (j-1)个方格,从点[1][1]出发想象发出射线到边界上所有点的总数。 如下图是i = 2, j =...
分类:其他好文   时间:2014-06-08 02:55:24    阅读次数:560
[LeetCode] Longest Palindromic Substring [14]
最长回文字串,相信做过Palindrome Partitioning II 这个题的同学应该可以很快做出来。没错,这个题还可以使用动态规划方法得到一个时间复杂度为O(n^2)的解法,当然如果你想要更好的时间复杂度的算法也是有的。好的,我们先来看看时间复杂度为O(n^2)的算法。 代码实现--动态规划O(n^2) 相信如果你在网上看过了别人的算法,你会发现我的算法是最简洁的。哈哈,这个题需要注意的是如果你用惯了vector的话,你这里肯定会得到超时的提示... ...代码二--复杂度为O(n)的算法...
分类:其他好文   时间:2014-06-07 12:08:43    阅读次数:224
SGU 183 Painting the balls (优化的动态规划)
题意:给n个白球,选其中一些涂为黑色,且给了涂第i个球的花费为ci,要求每m个连续的球中至少有两个黑球,问最小花费是多少?容易想到一个方程dp[i][j]=min{dp[k][i]}+c[j]dp[i][j]表示最后上色的两个球分别是第i和第j个球(i#include #include #inclu...
分类:其他好文   时间:2014-06-05 12:52:14    阅读次数:248
五大常用算法:分治、动态规划、贪心、回溯和分支界定
分治算法 一、基本概念    在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……     任何一个可以用计算机求解的...
分类:其他好文   时间:2014-06-04 14:10:55    阅读次数:344
每日算法之二十八:Longest Valid Parentheses
求最长合法匹配的长度,这道题可以用一维动态规划逆向求解。假设输入括号表达式为String s,维护一个长度为s.length的一维数组dp[],数组元素初始化为0。 dp[i]表示从s[i]到s[s.length - 1]包含s[i]的最长的有效匹配括号子串长度。则存在如下关系:...
分类:其他好文   时间:2014-06-04 13:52:03    阅读次数:279
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!