最长公共子序列,我居然没看出来.以前遇到过,只是都交给队友啦,卡了一上午………..
dp[i][j]表示s1串从1到i,与s2串从1到j,这段里面的最长公共子序列为多少.\
dp[i][j]= dp[i-1][j-1] + 1, s1[i] == s2[j];
max { dp[i-1][j] , dp[i][j-1] } , s1[i] != s2[j];
#include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
string s1,s2;
int dp[1000][1000];
int work()
{
int i,j;
memset(dp,0,sizeof(dp));
int len1=s1.length();
int len2=s2.length();
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(s1[i-1]==s2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[len1][len2];
}
int main()
{
while(cin>>s1>>s2)
{
int ans=work();
cout<<ans<<endl;
}
return 0;
}