题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006
题解:
重新刷一下51,发现自己连这基础题都打了半天,唉,不行了。
代码:
#include <set>
#include <map>
#include <cmath>
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int maxn = 1000+10;
int dp[maxn][maxn];
char s1[maxn],s2[maxn];
char ss[maxn];
int main()
{
scanf("%s%s",s1+1,s2+1);
met(dp,0);
int i,j;
for(i=1;s1[i];i++)
{
for(j=1;s2[j];j++)
dp[i][j]=max(dp[i-1][j-1]+(s1[i]==s2[j]?1:0),max(dp[i][j-1],dp[i-1][j]));
}
i--,j--;
int m=dp[i][j];
while(i>=1&&j>=1&&m)
{
if(s1[i]==s2[j])
{
ss[m--]=s1[i];
i--,j--;
}
else if(dp[i-1][j]>dp[i][j-1])
i--;
else
j--;
}
printf("%s\n",ss+1);
}