[ACM]Common Subsequence
来源:互联网 发布:西南大学网络继续教育 编辑:程序博客网 时间:2024/05/17 11:34
Common Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18605 Accepted Submission(s): 7875
Problem Description
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.
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.
Sample Input
abcfbc abfcabprogramming contest abcd mnp
Sample Output
420
Source
Southeastern Europe 2003
图中矩阵 [ i ] [j ]的意思是 第一个字符串从1到i个字母这一段与第二个字符串从1到j个字母这一段所具有的相同字母数,比如 矩阵中第二行第二列的数字为2 代表 ab 与 ab相同字母个数为2, 再比如第六行第一列的数字为1,代表abfcab 与a的相同字母个数为1。
通过图可以找到状态转移方程:
if(a [ i ] == b[ j ]) s[ i ] [ j ]=s[ i-1 ] [ j-1 ] +1; 当前格的数字等于其左上角的数字+1
if(a [ i ] != b [ j ]) s[ i ] [ j ]= max( s[ i -1 ] [ j ] , s[ i ] [ j-1 ] ) 当前格的数字等于 其左边的格的数字与上边的格的数字的最大值
代码:
#include <iostream>#include <algorithm>#include <string.h>#include <stdio.h>using namespace std;int s[1002][1002];int main(){ string s1,s2; int len1,len2; int i,j; while(cin>>s1>>s2) { memset(s,0,sizeof(s)); len1=s1.length(); len2=s2.length(); for(i=1;i<=len1;i++) for(j=1;j<=len2;j++)//辅助图里面的数字是从第一行,第一列开始的, { if(s1[i-1]==s2[j-1])//字符串的第一个字母为s[0],而不是s[1]切记 s[i][j]=s[i-1][j-1]+1;//状态转移方程 else s[i][j]=max(s[i-1][j],s[i][j-1]);//状态转移方程 } cout<<s[len1][len2]<<endl; } return 0;}
运行截图:
- [ACM]Common Subsequence
- [ACM]Common Subsequence
- Pku acm 1458 Common Subsequence
- 北大ACM 1458Common Subsequence
- ACM POJ 1458 Common Subsequence
- Pku acm 1458 Common Subsequence 题意分析
- HDOJ 1159 Common Subsequence 杭电 ACM
- 杭电 HDU ACM 1159 Common Subsequence
- Pku acm 1458 Common Subsequence 动态规划解析
- ACM-DP之Common Subsequence——HDU1159
- ACM程序设计选修课——1018: Common Subsequence
- 杭电acm 1159Common Subsequence(字符串处理+dp)
- Common Subsequence
- Common Subsequence
- Common Subsequence
- Common Subsequence
- Common Subsequence
- Common Subsequence
- uva 557 - Burger(概率)
- HDU 4289 最小割=最大流 求去掉最少点权值使得 起末点不连通
- android本地服务和远程服务
- poj 3176
- ubuntu防火墙设置
- [ACM]Common Subsequence
- Android学习篇章28-Broadcast广播基础-BroadcastReceiver
- c#语言的加密与解密
- 深入java虚拟机(一)——java虚拟机底层结构详解
- 做一些学习的事情一定要坚持下去
- 三维比例导引律仿真(源代码)
- 简明 Vim 练级攻略
- 编译mpc出现vs2010 CVTRES : fatal error CVT1100: duplicate resource -- VERSION, name:1, language:0x0409
- 基于Hadoop的云盘系统上传和下载效率优化及处理大量小文件的解决方法