动态规划:公共子序列
来源:互联网 发布:linux搭建php开发环境 编辑:程序博客网 时间:2024/06/02 01:58
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
abcfbc abfcabprogramming contest abcd mnp
420
思路如下:
建立二维数组dp[i][j],表示第一个序列前i个字母与第二个序列前j个字母最大公共子序列的长度;
对于a[i]==b[i],dp[i][j]=dp[i-1][j-1]+1;
对于a[i]!=b[i],dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
代码如下:
#include<iostream>#include<cstring>using namespace std;int max(int a,int b){if(a>=b)return a;elsereturn b;}int main(){int i,j,m,n,dp[205][205]={0};char a[205]={'\0'},b[205]={'\0'};while(cin>>a>>b){n=strlen(a);m=strlen(b);for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}cout<<dp[n][m]<<endl;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(dp,0,sizeof(dp)); //因为是循环输入,注意清零}}
0 0
- 动态规划-公共子序列
- 动态规划-公共子序列
- 动态规划:公共子序列
- 动态规划 公共子序列
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 公共子序列 LCS 动态规划
- 动态规划--最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划解决公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列(动态规划)
- [BZOJ 2064]分裂:状压DP
- 4.7 4.9 节练习
- Python 判断 有向图 是否有环
- 某狗2017实习生面试
- 关于tensorflow中的scope的命名及使用方法
- 动态规划:公共子序列
- angular2系列教程(一)hello world
- 菜鸟于心
- Java同步并发容器类
- 数据库多表查询
- poj 2891 Strange Way to Express Integers(中国剩余定理)
- Javaweb 登录注册的实现
- LeetCode17. Letter Combinations of a Phone Number
- CI框架的配置和MVC的简单介绍