#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int dp[100][100]= {0};
void LSC(int a[],int n)
{
int i,j;
int dp[100];
for(i=0; i<n; i++)
dp[i]=1;
for(i=0; i<n; i++)
for(j=0; j<i; j++)
if(a[i]>a[j]&&dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
}
int max=0;
for(i=0; i<n; i++)
if(max<dp[i])max=dp[i];
cout<<max<<endl;
}
void L(string a,string b)
{
int i,j;
for(i=1; i<=a.size(); i++)
for(j=1; j<=b.size(); j++)
{
if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1]+1;
else
{
dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
}
}
cout<<dp[a.size()][b.size()]<<endl;
string c;
for(i=a.size(),j=b.size(); i>=1&&j>=1;)
{
if(a[i-1]==b[j-1])
{
c+=a[i-1];
i--;
j--;
}
else
{
if(dp[i-1][j]>dp[i][j-1])
{
i--;
}
else j--;
}
}
reverse(c.begin(),c.end());
cout<<c<<endl;
}
int main()
{
string a1="12356",b1="12536";
L(a1,b1);
int a[5]= {0,3,1,4,5};
LSC(a,5);
return 0;
}
最长递增子序列长度+最长公共子序列
最新推荐文章于 2024-08-20 13:35:45 发布