LCS+LIS
2015-05-24 23:05
162 查看
#include<iostream> #include<string> using namespace std; string a,b; int dp[505][505]; int main() { while(cin>>a>>b) { int len1=a.length(); int len2=b.length(); //这里把数组第一横和第一列初始化为0 for(int i=0;i<len1;i++) dp[i][0]=0; for(int i=0;i<len2;i++) dp[0][i]=0; //核心内容 for(int i=1;i<=len1;i++) { for(int j=1;j<=len2;j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } cout<<dp[len1][len2]<<endl; } return 0; } //用最长公共子序列可以解决最长递增子序列的问题: //将原数组A排序然后的到的数组 A' 和原数组 A 求一下LCS得到的就是LIS了。 #include <iostream> #include <string> #include <math.h> #include <algorithm> using namespace std; int a[1005],dp[1005]; const int inf = 999999999; int main() { int n,i,t,m,j,ans; while(cin>>n&&n!=0) { memset(dp,0,sizeof(dp)); for(i = 1;i<=n;i++) cin>>a[i]; for(i = 1;i<=n;i++) { ans = -inf; for(j = 0;j<i;j++) { if(a[i]>a[j]) ans = max(ans,dp[j]); } dp[i] = ans+a[i]; } ans = -inf; for(i = 0;i<=n;i++) { if(dp[i]>ans) ans = dp[i]; } cout<<ans<<endl; } return 0; }
相关文章推荐
- LIS和LCS
- LCS,LIS等模板
- PAT 1045. Favorite Color Stripe (30) 变种LCS或LIS
- UVA-10635 LCS转化为LIS
- LIS,LCS,LICS 学习笔记
- LCS,LIS,LPS
- uva 10635 Prince and Princess (将LCS 转化为 LIS)
- UVA 10635 - Prince and Princess LCS转化为LIS
- uva 10635 Prince and Princess(LCS问题转化成LIS问题O(nlogn))
- UVA - 10635 Prince and Princess LCS转LIS
- O(nlogn)LIS及LCS算法
- uva10635 Prince and Princess(LCS转LIS)
- 单调递增最长子序列(LIS)&&最长公共子序列(LCS)
- LIS和LCS
- CDOJ 1349 柱爷大战滑稽王(dp LCS转LIS)
- LCS, LIS, 线性空间LCS( hirschberg算法)
- LIS_LCS-计蒜课
- UVA 10635 - Prince and Princess LCS转化为LIS
- hdu4545--暴力/水dp--LCS/LIS真的是个好东西
- LCS与LIS