ZJU1733 Common Subsequence - 最长公共子序列

来源:互联网 发布:隐马尔可夫模型算法 编辑:程序博客网 时间:2024/05/19 03:19

 题目描述:

给出两个字符串,求两个字符串的最长公共子序列的长度。

 

分析:

经典的动态规划题目。

设字符串为s,t。f[i][j]表示s前i个字母和t前j个字母组成的最长公共子序列长度。

状态转移方程:

f[i][j] = f[i-1][j-1]+1 (s[i]==t[j])

f[i][j] = max{ f[i-1][j] , f[i][j-1] }

/*ZJU1733 Common Subsequence*/#include #include #define N 205#define MAX(a,b) ((a)>(b)?(a):(b))#define clr(a) memset(a,0,sizeof(a))int LCS(char s[],char t[]){    int i,j;    int f[N][N]={0};        for(i=0;s[i];i++){        for(j=0;t[j];j++){            if(s[i]==t[j]) f[i+1][j+1]=f[i][j]+1;            else f[i+1][j+1]=MAX(f[i+1][j],f[i][j+1]);        }    }    return f[i][j];}int main(){    char s[N],t[N];        while(scanf("%s%s",s,t)!=EOF){        printf("%d/n",LCS(s,t));    }        return 0;}