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

 

posted @ 2012-05-06 21:35  开开甲  阅读(239)  评论(0编辑  收藏  举报