您的位置:首页 > 其它

poj1458 hdu1159

2015-08-13 21:46 337 查看
题目大意:

给定两个字符串序列,输出其中包含的最长的子序列的长度。

输入的两个对比的字符串以若干空格分割(这就涉及到了读入两个字符串的技巧)

输出:最长公共子序列的长度

LCS问题,经典的动态规划问题

从c[i][j]={0                                    //当i=0或者j=0;

                c[i-1][j-1]+1                  //当 i,j>0 并且xi=yj;

                max{c[i[-][j],c[i][j-1]}     //当i,j>0 并且 xi与yj不等}

代码如下:

# include <iostream>
using namespace std;

char s1[1000];
char s2[1000];
int c[1001][1001];

int main()
{
/*char s1[1000];
char s2[1000];
int c[1001][1001];*/

while(scanf("%s",s1+1)!=EOF)
{
scanf("%s",s2+1);
memset(c,0,sizeof(c));
int n,m,i,j,k;
n=strlen(s1+1);
m=strlen(s2+1);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(s1[i]==s2[j])
{
c[i][j]=c[i-1][j-1]+1;
}
else
{
if (c[i-1][j]>c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
}
}
printf("%d\n",c
[m]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息