二维动规是如果只用到本层的和上一层的数据就可以用滚动数组
比如 dp[i,j]=max(dp[i-1,j],dp[i,j-1]);
max的意思就不多说了...
具体例子的话,比较经典的就是最长公共子序列,就是 abcde 和 aecd的最长公共子序列就是acd。
如果不是滚动数组的话就是
for i:=1 to length(st1) do
for j:=1 to length(st2)d...
分类:
其他好文 时间:
2014-08-05 00:48:38
阅读次数:
266
今天听了老师讲的最长公共子序列,就拿以前做过的题又做了一遍。。。
我用的是最简单普通的方法,
代码:
#include
#include
#include
using namespace std;
int dp[1005][1005];
int main()
{
char a[1005], b[1005];
int t;
scanf("%d", &t);
while(t --){
...
分类:
其他好文 时间:
2014-08-04 17:59:47
阅读次数:
186
简单的DP。f[i][j]表示序列a中前i个中,序列b中前b个中,组成的最长公共子序列的长度。DP方程:if(a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]+1; else f[i][j]=max(f[i-1][j],f[i][j-1]);(我这个a下标是从0开始,f是从1开...
分类:
其他好文 时间:
2014-08-01 18:46:32
阅读次数:
209
有一个比较容易出错的点:反转求最长公共子序列,这是错误的想法 1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int n = s.length(); 5 int lon...
分类:
其他好文 时间:
2014-08-01 15:28:31
阅读次数:
214
求最短公共祖先,是最长公共子序列的变形。在DP的同时记录下路径,然后递归回去输出即可。如果碰到公共的,只输出一次。以第一个样例为例:图中数字是最大公共子段的长度,下标代表路径。带下划线的是递归时所走的路径。 1 //#define LOCAL 2 #include 3 #include 4 #i.....
分类:
其他好文 时间:
2014-07-31 16:02:46
阅读次数:
232
最长公共子序列的变形题目大意:给出两个基因序列,求这两个序列的最大相似度。题目中的表格给出了两两脱氧核苷酸的相似度。状态转移方程为:dp[i][j] = max(dp[i-1][j]+Similarity(s1[i], '-'), dp[i][j-1]+Similarity(s2[...
分类:
其他好文 时间:
2014-07-30 20:33:04
阅读次数:
176
最简单最基本的最长公共子序列的题目。吐槽一下为何没有给数据范围。。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxn = 1010;...
分类:
其他好文 时间:
2014-07-30 20:26:44
阅读次数:
214
本篇博文提供了实现求解所有最长公共子序列的程序实现,并提供输出所有公共子序列的方法解释,需要具备基础知识是求解一个公共子序列的动态规划方法,请自行查阅相关资料。...
分类:
其他好文 时间:
2014-07-29 21:52:04
阅读次数:
441
Common Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23108 Accepted Submission(s): 10149
Problem Description
A sub...
分类:
其他好文 时间:
2014-07-29 17:51:27
阅读次数:
286
引言子序列和子字符串或者连续子集的不同之处在于,子序列不需要是原序列上连续的值。对于子序列的题目,大多数需要用到DP的思想,因此,状态转移是关键。这里摘录两个常见子序列问题及其解法。例题1, 最长公共子序列我们知道最长公共子串的求法,先温习一下,它的求法也是使用DP思想,对于 字符串s1 和字符串s...
分类:
其他好文 时间:
2014-07-29 13:58:08
阅读次数:
255