HDU 1159 最长公共子序列(n*m)
2016-05-14 17:12
441 查看
Common Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32693 Accepted Submission(s): 14786
[align=left]Problem Description[/align]
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = <a, b, f, c> is a subsequence of X = <a, b, c, f, b, c> with index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of the maximum-length common subsequence of X and Y.
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
[align=left]Sample Input[/align]
abcfbc abfcab
programming contest
abcd mnp
[align=left]Sample Output[/align]
4
2
0
[align=left]Source[/align]
Southeastern Europe 2003
题意:求两个字符串的最长公共子序列的长度
题解: dp[i][j] 表示a串前i个字符与b串前j个字符 最长公共子序列的长度 N(n*m)
当a[i]==a[j]时 dp[i][j]=dp[i-1][j-1]+1;
否则 dp[i][j]=max(dp[i-1][j],dp[i][j-1])
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[1005],b[1005]; int dp[1005][1005]; int main() { while(cin>>a>>b) { int len1=strlen(a); int len2=strlen(b); memset(dp,0,sizeof(dp)); for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } cout<<dp[len1][len2]<<endl; } return 0; }
相关文章推荐
- KMP模板
- 学习小笔记
- 亚马逊员工教你打造DIY版Echo
- 缓存的 Effect
- 最快最简单的排序——桶排序
- jdk tomcat 安装
- Android ViewPager被嵌套在ScrollView中不显示的问题的解决方案
- jquery 对 <div>,<span>, <a>,<button>, <radio> 的 赋值与取值
- Tex中的引号
- Android 高清加载长图或大图方案
- Linux基本命令(开发常用的、电脑常用的)
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- 关于list、set、map的几点总结
- 74. 第一个错误的代码版本
- 2016 百度之星 资格赛
- android NDK方式调用Jar包
- Java:String、StringBuffer和StringBuilder的区别
- Android高级图片滚动控件,编写3D版的图片轮播器
- C# 遍历指定目录下的所有文件及文件夹
- 【bzoj4542】[Hnoi2016]大数