#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; }