题目大意
给定两段文本,问公共单词有多少个
题解
裸LCS。。。
代码:
#include<iostream> #include<string> using namespace std; #define MAXN 105 string x[MAXN],y[MAXN]; int path[MAXN][MAXN],dp[MAXN][MAXN]; int n,m; void work() { for(int i=1; i<=n; i++) dp[i][0]=0; for(int j=0; j<=m; j++) dp[0][j]=0; for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(x[i]==y[j]) { dp[i+1][j+1]=dp[i][j]+1; path[i+1][j+1]=0; } else { if(dp[i][j+1]<dp[i+1][j]) { dp[i+1][j+1]=dp[i+1][j]; path[i+1][j+1]=1; } else { dp[i+1][j+1]=dp[i][j+1]; path[i+1][j+1]=-1; } } } void print(int i,int j) { if(i==0||j==0) return; if(path[i][j]==0) { print(i-1,j-1); cout<<x[i-1]<<" "; } else if(path[i][j]==1) print(i,j-1); else print(i-1,j); } int main() { string s; while(cin>>s) { n=0,m=0; x[n++]=s; while(cin>>s&&s[0]!='#') x[n++]=s; while(cin>>s&&s[0]!='#') y[m++]=s; work(); print(n,m); cout<<endl; } return 0; }