例题见9018_1854

其实这个算法也就随便dp一下就好了

状态转移方程就是:

f[i][j]=max{

  f[i-1][j-1]+1(c1[i]==c2[j]),

  f[i][j-1] , f[i-1][j]

}

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[2001],b[2001];
int f[2001][2001],n,m;
inline int max(int x,int y){return x>y?x:y;}
int main()
{
    while(scanf("%s%s",a,b)!=EOF){
        memset(f,0,sizeof(f));
        n=strlen(a);m=strlen(b);
        for(int i=0;i<max(n,m);i++)f[i][0]=f[0][i]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(a[i-1]==b[j-1])f[i][j]=f[i-1][j-1]+1;
                else f[i][j]=max(f[i][j-1],f[i-1][j]);
        printf("%d\n",f[n][m]);
    }
    return 0;
}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

posted on 2017-08-01 20:36  Yzyet  阅读(242)  评论(0编辑  收藏  举报