您的位置:首页 > 其它

HDU 1159 最长公共子序列问题 动态规划

2010-12-11 20:46 232 查看
HDU 1159 最长公共子序列问题

详见杭电刘春英老师PPT

//DP算法:
//用f[i][j] 表示字符串a的第i个字母与字符串b的第j个字母比较,得到两串相比时第i和第j个字母之前相同字母的个数
// 如果a[i-1]==b[j-1], f(i,j)= f(i-1,j-1)+1;否则,f(i,j)=max(f(i,j-1),f(i-1,j));
#include<iostream>
#include<string>
using namespace std;
int main()
{
int f[500][500];
char a[500],b[500];
int i,j,lena,lenb;
while(scanf("%s%s",a,b)!=EOF)
{
lena=strlen(a);
lenb=strlen(b);
for(i=0;i<lena;i++)
f[0][i]=0;               //字符串a没有字符时,b与a比较的结果都是0
for(i=0;i<lenb;i++)
f[i][0]=0;                //字符串b没有字符时,a与b比较的结果都是0
for(i=1;i<=lena;i++)
{
for(j=1;j<=lenb;j++)
{
if(a[i-1]==b[j-1])
{
f[i][j]=f[i-1][j-1]+1;
}
else
{
if(f[i][j-1]>f[i-1][j]) f[i][j]=f[i][j-1];
else f[i][j]=f[i-1][j];
}
}
}

printf("%d/n",f[lena][lenb]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: