LCS与LIS
2015-04-20 21:39
253 查看
1425: LCS与LIS
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 55 Solved: 25
SubmitStatusWeb Board
Description
LCS(最长公共子序列)是单身,LIS(最长上升子序列)也是单身,于是他们在一起了,变成了LCIS(最长公共上升子序列)o(╯□╰)o。你的任务是求给定两个序列的LCIS的长度,此处上升指的是严格单调递增。Input
第一行一个正整数T(T <= 50),表示有T组数据。每组数据输入格式如下:
第一行为俩个正整数N,M(N,M<=50),表示俩个序列长度。
第二行N个正整数,表示第一个序列。
第三行M个正整数,表示第二个序列。
所有序列中的元素均<=200。
Output
共输出T行,即每组数据的LCIS的长度。Sample Input
25 51 3 2 5 41 2 3 5 49 118 1 2 7 6 3 4 13 54 1 2 9 10 3 8 7 13 5 6
Sample Output
34
HINT
样例解释第一组数据的LCIS为<1,2,5>或<1,2,4>或<1,3,5>或<1,3,4>,所以答案为3。
第二组数据的LCIS为<1,2,3,13>或<1,2,3,5>,所以答案为4。
Source
郑轻第六届校赛#include<iostream> #include<string.h> using namespace std; int main() { int T,N,M,a[51],b[51],i,j,dp[51][51],k; cin>>T; while(T--) { memset(dp,0,sizeof(dp)); cin>>N>>M; for(i=0;i<N;i++) cin>>a[i]; for(i=0;i<M;i++) cin>>b[i]; for(i=1;i<=N;i++) { k=0; for(j=1;j<=M;j++) { if(a[i-1]!=b[j-1]) dp[i][j]=dp[i-1][j]; if(a[i-1]>b[j-1] && dp[i][j]>dp[i][k]) k=j; if(a[i-1]==b[j-1]) { dp[i][j]=dp[i][k]+1; } } } int ans=-1;int x=N; for(i=1;i<=M;i++) { if(dp [i]>ans) { ans=dp [i]; } } cout<<ans<<endl; } return 0; }
相关文章推荐
- CDOJ 1349 柱爷大战滑稽王(dp LCS转LIS)
- LCS, LIS, 线性空间LCS( hirschberg算法)
- LIS_LCS-计蒜课
- UVA 10635 - Prince and Princess LCS转化为LIS
- hdu4545--暴力/水dp--LCS/LIS真的是个好东西
- 【动态规划14】UVA10635 Prince and princess(LCS转LIS)
- LIS&&LCS
- 编号(长度)为状态的动态规划(LCS,LIS等)
- 动态规划--LIS与LCS
- LCS问题与LIS问题--Java语言
- LCS LIS
- uva 10635 - Prince and Princess lcs->lis 2018-2-8
- LCS转LIS(大地的秘密题解)
- LCS/LIS/LCIS
- UVa 10635 Prince and Princess / LCS 转 LIS
- NYOJ 题目760 See LCS again(LIS求LCS)
- 动态规划总结之 LIS ,LCS
- uva10635 LCS映射转LIS
- 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)
- LCS?LIS