POJ DP
xx77009833
这个作者很懒,什么都没留下…
展开
-
poj2479(DP)
注意问题的转化 第一次DP是求以i结尾的最大子串和 然后遍历一遍就知道了到i为止的最大子串和(不必包括i) 然后正反求两次上面讲的过程 正反两次的结果挨着的两个值相加就是和了。然后求个最大值就行了 #include #include #include using namespace std; int main() { int num = 0;原创 2013-08-20 00:27:49 · 380 阅读 · 0 评论 -
POJ 1260
注意1,把条件判断转换成min或max 注意2,如果没有递推递归,那就是贪心了。贪心不回溯,never reconsider its choice. 这道题最开始想的其实是贪心,如果num[i-1]*a[i] 这不是DP,而是贪心,实际上贪心是不对的。因为i-1加到i,然后如果i再加到i+1,实际上做了i-1加到i+1的过程,那就不一定num[i-1]*a[i+1] 局部最优解没法保证全局原创 2013-08-23 00:15:38 · 413 阅读 · 0 评论 -
POJ 3267 (DP)
从前向后或者从后向前都行 d[i]表示前i个至少删除多少个字符后可以全用单词匹配成功 或者 d[i]表示i到结尾至少删除。。。。。 d[i] = min{d[i-1]+1, d[j]+N) 或 d[i] = min{d[i+1]+1, d[j]+N) 这题就是怎么去找最长匹配,如果高效找,如果就是从前向后找,那慢死 注意到字符串匹配有两种方式,前缀式和后缀式 这里原创 2013-08-23 16:02:14 · 346 阅读 · 0 评论 -
python实现自顶向下,自底向上
常用的算法设计思想主要有动态规划、贪婪法、随机化算法、回溯法等等,这些思想有重叠的部分,当面对一个问题的时候,从这几个思路入手往往都能得到一个还不错的答案。 本来想把动态规划单独拿出来写三篇文章呢,后来发现自己学疏才浅,实在是只能讲一些皮毛,更深入的东西尝试构思了几次,也没有什么进展,打算每种设计思想就写一篇吧。 动态规划(Dynamic Programming)是一种非常有用的用来解决复杂问转载 2013-08-26 21:27:59 · 1813 阅读 · 0 评论 -
POJ1088 (DP)
http://www.cppblog.com/abilitytao/archive/2009/02/19/74271.aspx 递推方法原创 2013-09-03 21:57:48 · 321 阅读 · 0 评论 -
POJ 2192 (DP) 或者 搜索
注意怎么想DP,先把问题用递归求解。 总之,要先想到怎么用递归来暴力求解,这样就先给出了一个答案,然后就会知道了那些东西被重复计算了 就可以定义出DP的状态方程了 比如这题,递归的话,肯定是要么从前向后匹配要么从后向前,一样的,这里代码从后向前了 匹配的时候就是a的前i个,和b的前j个能匹配c的前i+j+1个,就是一个个向后匹配的过程 那么决策就是第能和a[i]或者b[j]哪个匹配了原创 2013-08-26 22:32:03 · 390 阅读 · 0 评论 -
POJ 1141 DP
DP问题实现的要点就是, 先求子问题。 设dp[i,j]为从位置i到位置j需要加入字符的最小次数,有dp[i,j]=min(dp[i,k]+dp[k+1,j]),其中i 如上市这题的dp方程 发现dp[i][j]依赖于两个dp[i][k], dp[k+1][j] 因此要先求所依赖的这两项才行。 想办法怎么能先求这两项,只能是枚举串长度,从2到n 类似矩阵链乘法。原创 2013-10-22 18:07:11 · 389 阅读 · 0 评论 -
DP三句话总结
DP三句话 1. 根本原理是减少重复计算 2. 思想是由已知求未知 3. 实现要点是先求子问题 自我总结,经典。原创 2013-10-25 12:15:38 · 412 阅读 · 0 评论