转载注明出处:http://blog.csdn.net/wdq347/article/details/9001005最长公共子序列(LCS)最常见的算法是时间复杂度为O(n^2)的动态规划(DP)算法,但在James W. Hunt和Thomas G. Szymansky 的论文"A Fast Al...
分类:
编程语言 时间:
2015-02-08 14:07:47
阅读次数:
133
Problem Description
Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.
Given a consecutive number sequence S1, S...
分类:
其他好文 时间:
2015-02-08 09:09:37
阅读次数:
188
n^2的算法就行,很简单的动态规划。直接上代码/* * Author : ben */#include #include #include #include #include #include #include #include #include #include #include #incl...
分类:
其他好文 时间:
2015-02-07 22:55:16
阅读次数:
168
其实这道题就是简单的完全背包问题。从低到高推断出每种硬币的所有面额的解即可。当然,离线的话会慢一点。可以将问题需要求出的子问题全部求出来。下一个问题出现的时候,如果之前已经求解过则不必求解,否则在之前的基础上继续求解。原本觉得没什么好写的,关键是同样的方法用STL中的vector代替数组会超时!搞得以后都不敢用STL了.....
#include
#include
#include
#in...
分类:
其他好文 时间:
2015-02-07 20:22:39
阅读次数:
192
开始觉得这道题果断是用LCS解的,因为只要把大象的编号分别按照体重从小到大排序获得序列一,然后再将原始编号按照智商从大到小排序获得序列二。然后两个序列求最长子序列即可。但是后来发现这样做有问题,题目中要求所得子序列的体重或是智商都是严格单调的。解决方法其实也简单,只要在编号匹配的情况下,智商和体重都和前一个已经匹配的大象不一样就可以了。不过.....这种方法始终wrong answer。我想可能是...
分类:
其他好文 时间:
2015-02-07 11:49:23
阅读次数:
111
Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2.
Example
For s1 = "aabcc" s2 = "dbbca"
- When s3 = "aadbbcbcac", return true.
- When s3...
分类:
其他好文 时间:
2015-02-06 16:55:45
阅读次数:
98
这道题是非常基础的动态规划,类似于分阶段决策。题意是:一个M*N的数组,要求从第1列走到第N列且下一步的位置都只能是当前位置的相邻右侧,相邻右上,相邻右下三个位置。要求路径上的格子内的数字和最小。若有和相同的路径,则输出字典序最小的那一条路径。解法其实就是设置一个记忆数组,分阶段决策即可。
但是决策有从左往右和从右往左两种方式。开始我使用的从左往右的方式,这稍微麻烦一点,因为这需...
分类:
其他好文 时间:
2015-02-06 14:55:45
阅读次数:
135
组合计数 排列组合求总方案数 这个可以用一个一维的动态规划解决: f[i][0]表示第i头牛是牝牛的方案数 f[i][1]表示第i头牛是牡牛的方案数 则转移为:f[i][0]=f[i-1][0]+f[i-1][1]; f[i][1]=f[i-K-1][0]+f...
分类:
其他好文 时间:
2015-02-06 13:11:13
阅读次数:
236
子序列要求元素顺序一致就可以了,而字串必须是连续的。如ABCBDAB与BDCABA两个字符串,最长公共子序列有BCBA、BDAB和BCAB, 而最长公共字串只有AB和BD。
最长公共子序列
法一:穷举法
检查字符串x所有字序列,共有2^m个,检查它是否在y字符串中出现,每个需要O(n),时间复杂度为指数级的。
法二:动态规划(DP)
将两个字符串x[1…m]和...
分类:
编程语言 时间:
2015-02-06 11:23:02
阅读次数:
206
一. 动态规划动态规划(dynamic programming),与“分治思想”有些相似,都是利用将问题分 为子问题,并通过合并子问题的解来获得整个问题的解。于“分治”的不同之处在 于,对于一个相同的子问题动态规划算法不会计算第二次,其实现原理是将每一个计算过的子问题的值保存在一个表中。二. 记忆化...
分类:
编程语言 时间:
2015-02-06 00:44:25
阅读次数:
241