nyoj 36 最长公共子序列(动态规划)
2016-07-21 14:19
281 查看
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
输入
第一行给出一个整数N(0< N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
输出
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
样例输入
2
asdf
adfsd
123abc
abc123abc
样例输出
3
6
经典的dp问题
注意,子序列和子串的定义又是不一样的,子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。
有两个字符串a和b,长度分别是lena和lenb,那么
动态转移方程: 如果a[i-1]==b[j-1],则dp[i][j]=dp[i-1][j-1]+1;
否则,dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
难度:3
描述
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
输入
第一行给出一个整数N(0< N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
输出
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
样例输入
2
asdf
adfsd
123abc
abc123abc
样例输出
3
6
经典的dp问题
注意,子序列和子串的定义又是不一样的,子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。
有两个字符串a和b,长度分别是lena和lenb,那么
动态转移方程: 如果a[i-1]==b[j-1],则dp[i][j]=dp[i-1][j-1]+1;
否则,dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <iostream> #include <string.h> using namespace std; int dp[1001][1001]; int main() { int N; cin>>N; while(N--) { string a,b; cin>>a>>b; int i,j,lena=a.length(),lenb=b.length(); memset(dp,0,sizeof(dp)); for(i=1; i<=lena; i++) { for(j=1; j<=lenb; j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else if(dp[i-1][j]>=dp[i][j-1]) dp[i][j]=dp[i-1][j]; else dp[i][j]=dp[i][j-1]; } } cout<<dp[lena][lenb]<<endl; } return 0; }
相关文章推荐
- 初识Android之(二)- 实现Service AIDL小Demo
- 小甲鱼PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
- 书籍收藏
- Maven实现直接部署Web项目到Tomcat7(转)
- tomcat8相关配置问题
- 需求让你醉,代码让你更醉-致程序猴(TextView-SpannableString)
- extjs6 基础组件扩展和自定义组件封装--04静态js方法的设计思想
- SWIG 多语言接口变换 【转】
- 2017-8-2新开了一个ABP交流的QQ群(291304962 ),欢迎加入
- 小甲鱼PE详解之IMAGE_DOS_HEADER结构定义即各个属性的作用(PE详解01)
- js 对cookie的设置、删除、管理
- 自定义控件之重写ScrollView实现图片下拉放大
- 高德地图设置当前地图的经纬度范围
- 重写navagationBar.backBarbuttonItem的返回方法
- js——getElementBy
- Hadoop分布式文件系统HDFS的工作原理
- 多校比赛—It's All In The Mind
- 实习项目总结
- ECMAScript 6 扫盲
- 小白开始自己解决问题了吼吼~