poj-2806-公共子序列-C语言-动态规划
2017-07-26 09:20
459 查看
状态为两个字符串所比较的位数,值是比较部分已有的公共子序列的长度。
/*****************************************
**文件名:poj-2806
**Copyright (c) 2010-2020 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170726
**描述:poj-2806参考答案
**版本;1.0
*****************************************/
#include <stdio.h>
#include <string.h>
#define LENGTH 210
short maxlen[LENGTH][LENGTH];//记录状态对应值的二维数组
int main()
{
char s1[LENGTH],s2[LENGTH];
while(scanf("%s%s",s1+1,s2+1)==2)
{
short len1=strlen(s1+1),len2=strlen(s2+1),i,j;
for(i=0;i<=len1;i++)
maxlen[i][0]=0;
for(j=0;j<=len2;j++)
maxlen[0][j]=0;
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(s1[i]==s2[j])
maxlen[i][j]=maxlen[i-1][j-1]+1;
else
maxlen[i][j]=( maxlen[i-1][j]>maxlen[i][j-1] ? maxlen[i-1][j] : maxlen[i][j-1] );
}
}
printf("%d\n",maxlen[len1][len2]);
}
return 0;
}
/*****************************************
**文件名:poj-2806
**Copyright (c) 2010-2020 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170726
**描述:poj-2806参考答案
**版本;1.0
*****************************************/
#include <stdio.h>
#include <string.h>
#define LENGTH 210
short maxlen[LENGTH][LENGTH];//记录状态对应值的二维数组
int main()
{
char s1[LENGTH],s2[LENGTH];
while(scanf("%s%s",s1+1,s2+1)==2)
{
short len1=strlen(s1+1),len2=strlen(s2+1),i,j;
for(i=0;i<=len1;i++)
maxlen[i][0]=0;
for(j=0;j<=len2;j++)
maxlen[0][j]=0;
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(s1[i]==s2[j])
maxlen[i][j]=maxlen[i-1][j-1]+1;
else
maxlen[i][j]=( maxlen[i-1][j]>maxlen[i][j-1] ? maxlen[i-1][j] : maxlen[i][j-1] );
}
}
printf("%d\n",maxlen[len1][len2]);
}
return 0;
}
相关文章推荐
- poj 2806: 公共子序列
- poj 2806:公共子序列
- POJ百炼-2806-公共子序列
- POJ 2806 公共子序列 解题报告
- 最大公共子序列,最大子段和(动态规划)
- [dp](不连续)最大公共上升子序列 POJ 2127
- [算法导论]动态规划---最长公共最序列问题
- 2015年阿里在线笔试题:求两个字符串的最大公共子序列长度的C语言解法
- POJ 1080 基因序列相似度计算 动态规划
- POJ 1330 Nearest Common Ancestors 最近公共祖先 欧拉序列RMQ
- 动态规划求最长公共序列
- 最长公共字序列 动态规划 空间复杂度o(min{n,m})带打印
- poj 1080(sum初始化&数组下标i&最长公共自序列类型)
- 动态规划-公共子序列
- 利用动态规划找出最长公共单调递增子序列
- 数据结构之(动态规划)之最长公共序列
- 动态规划练习一 04:公共子序列
- poj 1080(动态规划之最长公共之序列)
- (三) POJ1050,动态规划必做题目,经典程度五颗星。这个题目的前身就是:求最大子序列和。 先来看最大子序列和。有一串数,有正有负,如2,-1,5,4,-9,7,0,3,-5。求:这
- C语言 最长子序列问题(两个序列的公共子序列)