题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=17083
题意:
输入两个字符串,找到最长的连续子序列的元素个数。
案例:
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
思路分析:
动态转移方程有两种情况
当a[i-1]=b[j-1]时,d[i][j]=d[i-1][j-1]+1;
当不相等时,d[i][j]=max(d[i-1][j],d[i][j-1]).
答案为d[strlen(a)][strlen(b)].
源代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int d[1000][1000]; char a[1000],b[1000]; int main() { int i,j; while(scanf("%s%s",a,b)!=EOF) { memset(d,0,sizeof(d)); for(i=1;i<=strlen(a);i++) for(j=1;j<=strlen(b);j++) { if(a[i-1]==b[j-1])d[i][j]=d[i-1][j-1]+1; else d[i][j]=d[i-1][j]>d[i][j-1]?d[i-1][j]:d[i][j-1]; } printf("%d ",d[strlen(a)][strlen(b)]); } return 0; }