NYOJ 36 最长公共子序列(基础LCS)
2015-08-06 20:55
204 查看
最长公共子序列
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
输入第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.输出每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。样例输入
2 asdf adfsd 123abc abc123abc
样例输出
3 6
基础的LCS
ac代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; int num[1010][1010]; int main() { int t,i,j; scanf("%d",&t); char s1[1010],s2[1010]; while(t--) { memset(num,0,sizeof(num)); scanf("%s%s",s1,s2); int len1=strlen(s1); int len2=strlen(s2); for(i=0;i<len1;i++) { for(j=0;j<len2;j++) { if(s1[i]==s2[j]) { num[i+1][j+1]=num[i][j]+1; } else { if(num[i+1][j]>num[i][j+1]) num[i+1][j+1]=num[i+1][j]; else num[i+1][j+1]=num[i][j+1]; } } } printf("%d\n",num[len1][len2]); } return 0; }
相关文章推荐
- java设计模式(5) - 策略者模式
- 图结构练习——最小生成树 Prim算法
- zoj 1671 Walking Ant
- hdu 1241 Oil Deposits(经典dfs)
- 【json】慕课网json学习
- Easyui使用记录
- OC学习笔记17--Foundation集合类之NSSet与NSDictionary
- mysql 分库分表
- proftpd+ssl安装及使用
- NOI2011 mayan游戏(DFS)
- ZOJ seeking 【深搜问题】及深搜的理解
- 作为c++初学者 又给大家带来一个小程序 英文句子的首字母大写
- 最早接触到的计算机编程语言——c语言
- hdoj-1425-sort【哈希】
- poj 2391 最大流+floyd+二分(转移避难)
- 哈希-Snowflake Snow Snowflakes
- ios UIView
- 哈希-Snowflake Snow Snowflakes 分类: POJ 哈希 2015-08-06 20:53 2人阅读 评论(0) 收藏
- 导航视图控制器学习笔记
- java设计模式(4) - 模板方法