动态规划 --- 最长子序列问题

来源:互联网 发布:淘宝卖家开通运费险 编辑:程序博客网 时间:2024/06/07 06:15
#include <stdio.h>#include <string.h>#define MAX_N 501#define MAX_M 501#define max(a,b) ((a)>(b)?(a):(b))int main(){    int n,m;    char s[MAX_N],t[MAX_M];    int dp[MAX_M+1][MAX_N+1];    while (1){        scanf("%s",&s);        scanf("%s",&t);        if ((strcmp(s,"#")==0)||(strcmp(t,"#")==0))break;        memset(dp,0,sizeof(dp));        int i,j;        for (i = 0;i < strlen(s);i ++){            for (j = 0;j < strlen(t);j ++){                if (s[i]==t[j]){                    if (j == 0 || i == 0)dp[i][j] = 0;                    dp[i+1][j+1] = dp[i][j] + 1;}                else dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1]);            }        }        printf("%d\n",dp[strlen(s)][strlen(t)]);    }    return 0;}
/*Description给定两个字符串,输出两个字符串的最长公共子序列长度Input输入2个字符串(保证字符串长度不超过500)文件有多组数据以‘#’号结束Output输出最长公共子序列长度Sample Inputabcabcabcdacdef#Sample Output33*/


原创粉丝点击