首页 > 代码库 > 最长公共子序列LCS (DP)
最长公共子序列LCS (DP)
题意:
求两个字符串的公共子序列,如“abcd” 与 “becd”的公共子序列是 “bcd”
分析:
设两个字符串为 串s 和串t
dp[i][j]:= s1..si和t1...tj对应的LCS长度
那么 dp[i][j] = {
0 , i =0 or j = 0;
dp[i-1][j-1] + 1, i ,j > 0 and si = tj;
max(dp[i-1][j] , dp[i][j-1]), i, j > 0 and si != tj;
#include<bits/stdc++.h>
int N,C;
int w[1010],v[1010];
int dp[1010][1010];
int main()
{
//freopen("1.txt","r",stdin);
int t;
scanf("%d", &t);
while(t--)
{
char a[1003],b[1003];
scanf("%s %s",a,b);
memset(dp,0,sizeof(dp));
int aa = strlen(a);
int bb = strlen(b);
for(int i = 1; i <= aa;i++)
for(int j = 1; j <= bb;j++)
{
if(a[i-1] == b[j-1])
dp[i][j] = dp[i-1][j-1]+1;
else
{
dp[i][j] = std::max(dp[i-1][j],dp[i][j-1]);
}
}
// 打印DP表
for(int i = 0; i <= aa;i++)
{
for(int j = 0; j <= bb;j++)
{
printf("%d ", dp[i][j]);
}
printf("\n");
}
printf("%d\n",dp[aa][bb]);
}
}
最长公共子序列LCS (DP)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。