http://poj.org/problem?id=1458 模版题
code1:
#include <stdio.h>
#include <string.h>
#define MAXN 301
int LCS[MAXN][MAXN];
char str1[MAXN], str2[MAXN];
int main()
{
int len1, len2, i, j;
while(scanf("%s%s",str1,str2)!=EOF)
{
memset(LCS,0,sizeof(LCS));
len1 = strlen(str1);
len2 = strlen(str2);
for(i=1; i<=len1; ++i)
for(j=1; j<=len2; ++j)
{
if(str1[i-1]==str2[j-1])
LCS[i][j] = LCS[i-1][j-1]+1;
else
{
if(LCS[i-1][j]>LCS[i][j-1])
LCS[i][j] = LCS[i-1][j];
else
LCS[i][j] = LCS[i][j-1];
}
}
printf("%d\n",LCS[len1][len2]);
}
return 0;
}
code2(滚动数组):
#include <stdio.h> #include <string.h> #define MAXN 301 int LCS[2][MAXN]; char str1[MAXN], str2[MAXN]; int main() { int len1, len2, i, j,k1,k2; while(scanf("%s%s",str1,str2)!=EOF) { memset(LCS,0,sizeof(LCS)); len1 = strlen(str1); len2 = strlen(str2); for(i=1; i<=len1; ++i) for(j=1; j<=len2; ++j) { k1 = i &1; k2 = (i+1) &1; if(str1[i-1]==str2[j-1]) LCS[k1][j] = LCS[k2][j-1]+1; else { if(LCS[k2][j]>LCS[k1][j-1]) LCS[k1][j] = LCS[k2][j]; else LCS[k1][j] = LCS[k1][j-1]; } } printf("%d\n",LCS[len1 &1][len2]); } return 0; }