百练2806:公共子序列题解
来源:互联网 发布:linux 文件写权限 编辑:程序博客网 时间:2024/06/09 18:54
2806:公共子序列
- 查看
- 提交
- 统计
- 提示
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 我们称序列Z = < z1, z2, ..., zk >是序列X = < x1, x2, ..., xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, ..., ik >,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。 - 输入
- 输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列。两个字符串之间由若干个空格隔开。
- 输出
- 对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。
- 样例输入
abcfbc abfcabprogramming contest abcd mnp
- 样例输出
420
- 来源
- 翻译自Southeastern Europe 2003的试题
- 查看
- 提交
- 统计
- 提示
- 提问
- 代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 205;int dp[maxn][maxn];char str1[maxn],str2[maxn];int main(){while(~scanf("%s%s",str1,str2)){memset(dp,0,sizeof(dp));int len1 = strlen(str1),len2 = strlen(str2);for(int i = 0; i < len1;i++){for(int j =0;j<len2;j++){if(str1[i] == str2[j]) dp[i+1][j+1] = dp[i][j] + 1;else dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);}} printf("%d\n",dp[len1][len2]);}return 0;}
阅读全文
0 0
- 百练2806:公共子序列题解
- 百练+最长公共子序列+DP
- POJ百炼-2806-公共子序列
- 动态规划专练2 最长公共子序列问题
- 百练2744:子串题解
- poj 2806: 公共子序列
- poj 2806:公共子序列
- 百练2757最长上升子序列
- 百练2757:最长上升子序列
- 百练2757:最长上升子序列
- 百练+最长上升子序列+DP
- 最长公共子序列 & 最长不减(不增)子序列-例题题解【poj1458,poj2250,poj1159】
- (HDU 5791)Two <DP求公共子序列的个数> 多校训练5
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- win10+anaconda3+tensorflow-gpu一些报错的解决方法
- threadReentranLockAndCondition
- 一种经典的邻接表的实现和遍历方式
- linux基本命令及操作14(磁盘加密、RAID、lvm)
- Spring实战笔记——Bean的高级装配
- 百练2806:公共子序列题解
- 12. 开发工具(make,makefile)
- python unicode转string
- 求树的最大独立集
- 知识点14:数组内存储1-100的不重复随机数问题
- json串的使用与操作
- Java内存的一点理解, 静态方法和实例方法的区别及使用场景
- Linux
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution(逆向思维)