POJ 1458 dp 最大公共子序列
2015-10-14 21:25
295 查看
Common Subsequence
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. Input The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. Output 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. Sample Input abcfbc abfcab programming contest abcd mnp Sample Output 4 2 0 Source Southeastern Europe 2003 |
[Discuss]
ACcode:
#pragma warning(disable:4786)//使命名长度不受限制
#pragma comment(linker, "/STACK:102400000,102400000")//手工开栈
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <stack>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define rds(x) scanf("%s",x)
#define rdc(x) scanf("%c",&x)
#define ll long long int
#define maxn 1005
#define mod 1000000007
#define INF 0x3f3f3f3f //int 最大值
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)
#define MT(x,i) memset(x,i,sizeof(x))
#define PI acos(-1.0)
#define E exp(1)
using namespace std;
int dp[maxn][maxn];
string s1,s2;
int main(){
while(cin>>s1>>s2){
int lena=s1.length();
int lenb=s2.length();
FOR(i,0,lena-1)dp[i][0]=0;
FOR(j,0,lenb-1)dp[0][j]=0;
FOR(i,1,lena)
FOR(j,1,lenb)
if(s1[i-1]==s2[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[lena][lenb]);
}
return 0;
}
/*
abcfbc abfcab programming contest abcd mnp
*/
相关文章推荐
- linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random)
- Java语法糖4:内部类
- 45. Jump Game II (Array, DP)
- 网络协议
- 判断1000年-2000年之间的闰年
- BroadcastReceiver总结
- [BZOJ 1053] [HAOI2007]反素数ant 数论+搜索
- <面试题>java基础知识易错点
- NSUserDefaults 存储可变数组问题
- UVALive 4260 Fortune Card Game (Regionals 2008 Asia Taipei +DP)
- PostgreSQL & Oracle - 2 OLTP "update/select based primary key" & insert
- vi/vim 常用命令
- iOS地图 MapKit框架
- html和xml解析
- BZOJ 1978: [BeiJing2010]取数游戏 game( dp )
- 网络原理,以及虚拟机相关配置
- PostgreSQL & Oracle -1 OLTP "update/select based primary key" & insert
- 影像去条带
- 面试小结一:关于操作系统的面试题整理
- Floyd传递闭包-POJ-3660-Cow Contest