hdu 1423(LCS+LIS)】的更多相关文章

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423 好坑啊..还有公共串为0时的特殊判断,还有格式错误..看Discuss看知道除了最后一组测试数据之外都需要空行.. 其余的会LCS打印路径就行了. 法一: ///公共最长上升子序列 #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include…
网站:CSUST 8月3日(LCS,LIS,LCIS) LCS:      以下讲解来自:http://blog.csdn.net/yysdsyl/article/details/4226630 [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1…
HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS) http://acm.hdu.edu.cn/showproblem.php?pid=1423 题意: 给你两个数字组成的串a和b,要你求出它们的最长公共严格递增子序列的长度(LCIS). 分析: 首先我们令f[i][j]==x表示是a串的前i个字符与b串的前j个字符构成的且以b[j]结尾的LCIS长度. 当a[i]!=b[j]时:        f[i][j]=f[i-1][j…
/************************* LCS/LIS/LCIs模板总结: *************************/ /***************************************************** LCS:最长公共子序列 求长度为 len1 的序列 A 和长度为 len2 的序列 B 的LCS 注意:序列下标从 0 开始 滚动数组写法. 返回 LCS 长度 ******************************************…
动态规划 P1439 [模板]最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给出 1,2,-,n 的两个排列 P1 和 P2 ,求它们的最长公共子序列. 输入格式 第一行是一个数 n. 接下来两行,每行为 n 个数,为自然数 1,2,-,n 的一个排列. 输出格式 一个数,即最长公共子序列的长度. 输入输出样例 输入 #1 5 3 2 1 4 5 1 2 3 4 5 输出 #1 3 说明/提示 对于 50% 的数据, n≤1000: 对于 100%…
http://acm.hdu.edu.cn/showproblem.php?pid=1423 4.LICS.O(lena * lenb) 设dp[i][j]表示a[]的前i项,以b[]的第j项结尾时,能匹配的最大值. ①.不匹配a[i]这个数,则是dp[i][j] = dp[i – 1][j]; ②.匹配a[i]这个数,则需要a[i] == b[j] && b[j] > b[k]   推出   dp[i][j] = max(dp[i – 1][k]) + 1, 这样复杂度需要O(n3…
http://acm.hdu.edu.cn/showproblem.php?pid=1423 在前一道题的基础上多了一次筛选 要选出一个最长的递增数列 lower_bound()函数很好用,二分搜索找出满足ai>k的ai最小指针 还有upper_bound() 头文件#include<algorithm> 比如求长度为n的数组a中k的个数:upper_bound(a,a+n,k)-lower_bound(a,a+n,k) int 放在main函数里面声明会出现程序崩溃,放在全局就没有问题…
LCS Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5495 Description 你有两个序列\{a_1,a_2,...,a_n\}{a​1​​,a​2​​,...,a​n​​}和\{b_1,b_2,...,b_n\}{b​1​​,b​2​​,...,b​n​​}. 他们都是11到nn的一个排列. 你需要找到另一个排列\{p_1,p_2,...,p_n\}{p​1​…
http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意 给出1~n的插入顺序,要求每次插入之后的LIS 分析 首先用线段树还原出最终序列.因为插入的顺序是按1-n的顺序插入的,我们还原位置后,直接对位置进行求LIS,即为当前数的LIS.这里根据数据是从小到大插入的性质,用了比较巧妙的解法.先把每个数的位置保存起来,从小到大遍历,二分查找当前数据的位置处在已求出的LIS中的位置,比较长度后更新,再加入这个数据的位置,因为数据是从小到大的. #includ…
for(int i = 1;i <= n;i++) { int dpmax = 0; for(int j = 1;j <= m;j++) { dp[i][j] = dp[i-1][j]; if(a[i] > b[j] && dpmax < dp[i-1][j])dpmax = dp[i-1][j]; if(a[i] == b[j])dp[i][j] = dpmax + 1; ret = max(ret,dp[i][j]); } } LCS最长公共子序列: 状态方程是…