LIS&&LCS
2017-08-09 15:38
281 查看
LCS:
LIS:o(n^2)
LCS:o(nlogn)
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<stack> #define INF 0x3f3f3f3f using namespace std; int main() { char str1[55]; char str2[55]; scanf("%s %s",str1+1,str2+1); str1[0]=str2[0]='0'; int len1=strlen(str1)-1; int len2=strlen(str2)-1; int dp[55][55]={0}; int i,j; for(i=1;i<=len1;i++) { for(j=1;j<=len2;j++) { if(str1[i]==str2[j]) dp[i][j]=dp[i-1][j-1]+1; else { dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } stack<char>stk; int pos1=len1,pos2=len2; while(pos1>0&&pos2>0) { if(str1[pos1]==str2[pos2]) { stk.push(str1[pos1]); pos1--; pos2--; } else { if(dp[pos1-1][pos2]>dp[pos1][pos2-1]) pos1--; else pos2--; } } while(!stk.empty()) { printf("%c%c",stk.top(),(stk.size()==1)?'\n':' '); stk.pop(); } printf("%d\n",dp[len1][len2]); return 0; }
LIS:o(n^2)
#include<cstdio> #include<algorithm> using namespace std; int a[100000]; int dp[100000]; int main() { int l; scanf("%d",&l); for(int k=0;k<l;k++) { int n; scanf("%d",&n); int ans=0; for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) { dp[i]=1; for(int j=0;j<i;j++) { if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1); } ans=max(ans,dp[i]); } printf("%d\n",ans); } return 0; }
LCS:o(nlogn)
#include <cstdio> #include <algorithm> #define INF 0x3f3f3f using namespace std; int dp[50010],a[50010]; int main() { int n,i,j; int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;++i) { scanf("%d",&a[i]); dp[i]=INF; //初始化数组为无穷大 } for(i=0;i<n;++i) *lower_bound(dp,dp+n,a[i])=a[i]; //挑选首个大于等于a[i]的数并用a[i]替换 printf("%d\n",lower_bound(dp,dp+n,INF)-dp); } return 0; }
相关文章推荐
- LIS&LCS 线性结构dp
- 8月3号的LCS,LIS,LICS:Longest Ordered Subsequence&&Common Subsequence&&Greatest Common Increasing Subsequence
- 单调递增最长子序列(LIS)&&最长公共子序列(LCS)
- 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
- LIS && LCS && LCIS
- LIS&LCS最长递增子序列和最长公共子序列问题
- Hdu 1513 & Poj 1159 (LCS) + Hdu 1025 (LIS)
- 动态规划——最长公共子序列(LCS)&最长递增子序列(LIS)
- LIS && LCS && LCIS && LPS && MCS模板
- BestCoder Round #87(1003-【思维】【LIS&&LCS】)
- nyoj See LCS again 760 (LCS&&LIS) 好题
- 10635 - Prince and Princess LCS&LIS
- LCS && LIS
- 10635 - Prince and Princess LCS&LIS
- 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
- 最长上升子序列(LIS)&最长公共子序列(LCS)
- 最长上升子序列(LIS) -最长公共子序列(LCS)
- Prince and Princess UVA - 10635(LCS转LIS)
- HDU 1160 FatMouse's Speed(LIS)
- his&racs&lis&ris