Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 4965 | Accepted: 2266 | Special Judge |
Description
Input
Output
Sample Input
die einkommen der landwirte sind fuer die abgeordneten ein buch mit sieben siegeln um dem abzuhelfen muessen dringend alle subventionsgesetze verbessert werden # die steuern auf vermoegen und einkommen sollten nach meinung der abgeordneten nachdruecklich erhoben werden dazu muessen die kontrollbefugnisse der finanzbehoerden dringend verbessert werden #
Sample Output
die einkommen der abgeordneten muessen dringend verbessert werden
开始学习DP............(受鸨神影响)。本题要求的是最长公共子“单词”,输入很烦人.......然后就是套用最长公共子串的模版了.......打印的话则是借助标志从终点向起点前进,递归打印(和图论中打印路径差不多)。
#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <vector> #include <set> #include <queue> #include <stack> #include <climits>//形如INT_MAX一类的 #define MAX 1050 #define INF 0x7FFFFFFF # define eps 1e-5 using namespace std; char a[101][31],b[101][31]; int len[6005][6005]; int index[6005][6005];//标志 void print(int i,int j)//模版打印 { if(i>=1 && j>=1) { if(index[i][j] == 0) { print(i-1,j-1); if(j != 1) cout << ' '; cout << b[j-1]; } if(index[i][j] == 1) { print(i,j-1); } if(index[i][j] == -1) { print(i-1,j); } } } int main() { int i,j; char d[50]; while(cin >> d) { memset(a,'\0',sizeof(a)); memset(b,'\0',sizeof(b)); i=0; while(strcmp(d,"#")!=0)//第一个字典输入 { strcpy(a[i],d); i++; scanf("%s",d); } scanf("%s",d); j=0; while(strcmp(d,"#")!=0)//第二个字典输入 { strcpy(b[j],d); j++; scanf("%s",d); } int len1 = i; int len2 = j; for(i=0; i<len1; i++) { len[i][0] = 0; } for(i=0; i<len2; i++) { len[0][i] = 0; } for(i=1; i<=len1; i++)//模版最长公共子串 for(j=1; j<=len2; j++) { if(strcmp(a[i-1],b[j-1]) == 0 ) { len[i][j] = len[i-1][j-1] + 1; index[i][j] = 0; } else { if(len[i-1][j] > len[i][j-1]) { len[i][j] = len[i-1][j]; index[i][j] = -1; } else { len[i][j] = len[i][j-1]; index[i][j] = 1; } } } print(len1,len2);//从终点开始,递归打印 cout << endl; cout << endl; //cout << len[len1][len2] << endl; } return 0; }