最长公共子序列 【DP】+【最长公共子序列】
来源:互联网 发布:java计算a阶乘之和 编辑:程序博客网 时间:2024/06/04 18:57
最长公共子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。- 输入
- 第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000. - 输出
- 每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
- 样例输入
2asdfadfsd123abcabc123abc
- 样例输出
36
思路: 模板题目
代码
#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<stack>#define inf 0x3f3f3f#define M 1000+10using namespace std;int dp[M][M];int main(){int n;scanf("%d",&n);while(n--){char s[M],ss[M];scanf("%s%s",s,ss);int l=strlen(s);int ll=strlen(ss);
for(int i=0;i<=l;i++) dp[i][0]=0;for(int j=0;j<=ll;j++)dp[0][j]=0;for(int i=1;i<=l;i++)for(int j=1;j<=ll;j++){ if(s[i-1]==ss[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}printf("%d\n",dp[l][ll]);} return 0; }
0 0
- 最长公共子序列--DP
- DP---最长公共子序列
- 最长公共子序列dp
- DP 最长公共子序列
- DP 最长公共子序列
- 最长公共子序列-DP
- 【DP】最长公共子序列。
- 最长公共子序列 DP
- DP--最长公共子序列
- dp最长公共子序列
- dp 最长公共子序列
- DP最长公共子序列
- 最长公共子序列-dp
- dp--最长公共子序列
- 最长公共子序列<DP>
- 最长公共子序列(DP)
- dp-最长公共子序列
- dp最长公共子序列
- 从尾到头输出单链表
- KVM、QEMU与libvirt介绍
- Application Not Responding
- MFC Windows程序设计--在窗口绘图
- C++ — 内联函数
- 最长公共子序列 【DP】+【最长公共子序列】
- 求先序排列
- 解析深度卷积神经网络的14种设计模式
- 双系统进一次Win10就再也没有了系统选择界面
- Qt 判断网络连接
- Js_基础小结
- HDU 1004 Let the Balloon Rise
- 点和直线
- 斐波那契数列 通项公式 [数学]