您的位置:首页 > 其它

hud1151 动态规划 最大的公共子序列

2014-11-06 21:10 155 查看
就是求最大公共子序列,很经典的一题,这题就当复习算法啦

递推公式:

c[i][j]=c[i-1][j-1]+1 当a[i-1]==b[j-1]时

c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1] 当a[i-1]!=a[j-1]时

#include<stdio.h>
#include<cstring>

int c[500][500];
char a[500],b[500];

int LCS(int m,int n)
{
int i,j;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++){
if(a[i-1]==b[j-1])
{
c[i][j]=c[i-1][j-1]+1;
}
else{
c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1];
}
}
}
return c[m]
;
}

int main()
{
int i,j,m,n;

while(scanf("%s %s",a,b)!=EOF)
{
memset(c,0,sizeof(c));
i=strlen(a);
j=strlen(b);
printf("%d\n",LCS(i,j));
}

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