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; }