您的位置:首页 > 其它

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

2017-11-20 19:15 260 查看
#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 Input
abc
abc
abcd
acdef
#
Sample Output
3
3*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: