解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc         abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序列的长度

a    b    f    c    a    b

0    0    0    0    0   0    0

a  0    1     1    1    1   1    1

b  0    1     2    2    2   2    2

c  0    1     2    2    3   3    3

f  0     1     2    3    3   3   3

b 0     1    2     3   3    3   4

c  0     1    2     3   4   4    4

其中 s1 abcfbc

s2 abfcab

以s1中的a来分析,用它与s2中的字母比较,如果相同,那么dp[i][j]=dp[i-1][j-1]+1(遇到相同的字母公共子序列的长度增加1)

如果不同的话,dp[i][j]=max(dp[i-1][j],dp[i][j-1])                 (即取相邻两种情况中的最大值)

Common Subsequence
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 39737   Accepted: 15977

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.

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
#include<stdio.h>
#include<string.h>
#define maxn 10010
int dp[maxn][maxn]; int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
char s1[maxn],s2[maxn];
int len1,len2,i,j;
while(scanf("%s %s",&s1,&s2)!=EOF)
{
len1=strlen(s1);
len2=strlen(s2); for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
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[len1][len2]);
} }

  

最新文章

  1. Fedora中允许mysql远程访问的几种方式
  2. hibernate关联关系笔记
  3. [Algorithm Basics] Search
  4. [Excel] C# ExcelHelper操作类 (转载)
  5. pfile,spfile 初始化参数文件顺序【weber出品】
  6. :before :after
  7. C#语言基础之运算符
  8. tomcat发请求,查看各个环节的耗时时间
  9. java中List按指定大小分割
  10. Install LAMP Stack On Ubuntu 16.04
  11. mysql知识积累
  12. SAP HANA项目过程中优化分析以及可行性验证
  13. IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  14. VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
  15. beego学习笔记(4):开发文档阅读(1)
  16. Elasticsearch JVM Heap Size大于32G,有什么影响?
  17. 敏捷冲刺Day2
  18. 0818JavaWeb基础
  19. Ant Design项目记录和CSS3的总结和Es6的基本总结
  20. HDU1010(dfs+剪枝)

热门文章

  1. MVC 接收文件
  2. pycharm一些快捷键
  3. BZOJ 1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏 幼儿园测试题
  4. Scalable Web Architecture and Distributed Systems
  5. echart全局属性,自用,搜索比较快
  6. Python for json
  7. Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
  8. centos solr 集群搭建
  9. mongodb--linux下的安装
  10. [HTML5] a tag, rel=&quot;noopener&quot;