POJ 1458 (DP)
题目:http://poj.org/problem?id=1458
简单的经典题。
复习下LCS和滚动数组。
代码:
#include <stdio.h>
#include <string.h>
char a[1001],b[1001];
int d[2][1001];
int main()
{
int lena,lenb,n,i,j;
while(scanf("%s %s",a,b) != EOF )
{
memset(d,0,sizeof(d));
lena = strlen(a);
lenb = strlen(b);
for(i = 1 ; i <= lena ; ++i)
for(j = 1 ; j <= lenb ; ++j)
{
if(a[i-1] == b[j-1])
d[i%2][j] = d[(i-1)%2][j-1] + 1;
else
{
d[i%2][j] = d[i%2][j-1] > d[(i-1)%2][j] ? d[i%2][j-1] : d[(i-1)%2][j];
}
}
printf("%d\n",d[lena%2][lenb]);
}
return 0;
}

浙公网安备 33010602011771号