题目链接:http://poj.org/problem?id=2250
poj 的数据好水啊!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 110
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int dp[110][110];
char str1[110][33],str2[110][33];
int ans[110],cnt,len1,len2;
int main()
{
int i,j,tmpi,tmpj;
while(scanf("%s",str1[1])!=EOF)
{
i=1;
if(str1[1][0]!='#')
{
for(i=2;1;i++)
{
scanf("%s",str1[i]);
if(str1[i][0]=='#')
break;
}
}
len1=i-1;
for(i=1;1;i++)
{
scanf("%s",str2[i]);
if(str2[i][0]=='#')
break;
}
len2=i-1;
dp[0][0]=dp[0][1]=dp[1][0]=0;
for(i=1;i<=len1;i++)
for(j=1;j<=len2;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
if(strcmp(str1[i],str2[j])==0)
dp[i][j]=dp[i-1][j-1]+1;
}
tmpi=len1,tmpj=len2;
cnt=0;
while(1)
{
if(dp[tmpi][tmpj]==0)
break;
if(strcmp(str1[tmpi],str2[tmpj])==0)
{
ans[cnt++]=tmpi;
tmpi=tmpi-1;
tmpj=tmpj-1;
}
else
{
if(dp[tmpi][tmpj]==dp[tmpi-1][tmpj])
{
tmpi=tmpi-1;
}
else
tmpj=tmpj-1;
}
}
if(cnt>0)
printf("%s",str1[ans[cnt-1]]);
for(i=cnt-2;i>=0;i--)
printf(" %s",str1[ans[i]]);
puts("");
}
return 0;
}