您的位置:首页 > 产品设计 > UI/UE

PKU 1458 HDOJ 1159 Common Subsequence

2009-03-24 20:22 387 查看
最长公共子序列LCS (学习逆向求解和向多维转化的思想)
经典例题:PKU 1458 HDOJ 1159 Common Subsequence
http://acm.pku.edu.cn/JudgeOnline/problem?id=1458
http://acm.hdu.edu.cn/showproblem.php?pid=1159
这题苏强的表格画得很好,引用一下
a
b
c
f
b
a
0
1
2
3
4
5
6
0
0
0
0
0
0
0
0
a
1
0
1
1
1
1
1
1
b
2
0
1
2
2
2
2
2
f
3
0
1
2
2
3
3
3
c
4
0
1
2
3
3
3
3
a
5
0
1
2
3
3
3
4
和数塔的感觉有点像,就是一路地记录下N*M种可能时的最优解.
求解代码:

#include <iostream>
using namespace std;
char a[1002];
char b[1002];
int maxlen[1002][1002];
int main()
{
int i,j,k,n,m,t;
while (scanf("%s %s",a+1,b+1)!=EOF)
{
int alen = strlen(a+1);
int blen = strlen(b+1);
for (i=0;i<=alen;i++)
{
maxlen[i][0] = 0;
}
for (i=0;i<=blen;i++)
{
maxlen[0][i] = 0;
}
for (i=1;i<=alen;i++)
{
for (j=1;j<=blen;j++)
{
if (a[i] == b[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[alen][blen]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: