oj. 1008——最长公共子序列
1008——最长公共子序列
Problem Description
从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下地字符按原来顺序组成的串。例如:“ ”,“a”,“xb”,“aaa”,“bbb”,“xabb”,“xaaabbb”都是串“xaaabbb”的子序列。(例子中的串不包含引号。)
编程求N个非空串的最长公共子序列的长度。限制:2<=N<=100;N个串中的字符只会是数字0,1,…,9或小写英文字母a,b,…,z;每个串非空且最多含100个字符;N个串的长度的乘积不会超过30000。
Input
文件第1行是一个整数T,表示测试数据的个数(1<=T<=10)。接下来有T组测试数据。各组测试数据的第1行是一个整数Ni,表示第i组数据中串的个数。各组测试数据的第2到N+1行中,每行一个串,串中不会有空格,但行首和行末可能有空格,这些空格当然不算作串的一部分。
Output
输出T行,每行一个数,第i行的数表示第i组测试数据中Ni个非空串的最长公共子序列的长度。
Sample Input
1
3
ab
bc
cd
Sample Output
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max2(a,b) ((a) > (b) ? (a) : (b))
#define min2(a,b) ((a) < (b) ? (a) : (b))char s[105][105];
int len[105];
int dp[30005];
int n;
int LCS(int *x)
{int a,i,j,b;//如果当前有字符串的长度为0,则返回0for(i=1; i<=n; i++){if(x[i]==0){return 0;}//建立映射}for(a=x[n]-1,i=n-1; i>=1; i--){a=a*len[i]+x[i]-1;//记忆化搜索}if(dp[a]>=0){return dp[a];//判断是否所有串的最后一个字符都相等}for(i=2; i<=n; i++){if(s[1][x[1]-1]!=s[i][x[i]-1]){break;}}if(i>n) //如果都相等,则最大长度+1{for(j=1; j<=n; j++){x[j]--;}b=LCS(x)+1;for(j=1; j<=n; j++){x[j]++;}}else //否则,求删去某个字符串的最后一个字符之后得到的最大值{b=0;for(j=1; j<=n; j++){x[j]--;int t=LCS(x);b=max2(t,b);x[j]++;}}dp[a]=b;return b;
}
int main()
{int t,i;int m[105];scanf("%d",&t);while(t--){scanf("%d",&n);for(i=1; i<=n; i++){scanf("%s",s[i]);len[i]=m[i]=strlen(s[i]);}memset(dp,-1,sizeof(dp));printf("%d\n",LCS(m));}return 0;
}
oj. 1008——最长公共子序列相关推荐
- 最长公共子序列算法 java_转【算法之动态规划(三)】动态规划算法之:最长公共子序列 最长公共子串(LCS)字符串相似度算法...
1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 2.最长公共子串 其实这是一个序贯决策问题 ...
- 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- POJ 3080 多个串最长公共子序列
求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...
- java实现最长连续子序列_最长公共子序列 ||
问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...
- 触类旁通,经典面试题最长公共子序列应该这么答
作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...
- 模板 - 最长上升子序列与最长公共子序列
整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
最新文章
- proftpd登陆速度慢的解决[转]
- SCOM 2012系列⑨单台服务器拓扑监控
- -ms-,-moz-,-webkit-,-o-含义及各浏览器内核整理
- 存储知识:数据一致性、分级存储、分层存储与信息生命周期管理
- 【Python】字典(Dictionary) items()方法
- DataWorks搬站方案:Azkaban作业迁移至DataWorks
- mysql数据库with ur_Python使用MySQL数据库(新)
- python外卷(12)-sort(),sorted(),ord(),chr()
- RabbitMQ实例教程:主题交换机
- 大数据技术综合分析!数据采集与预处理
- Ubuntu引导文件丢失,grub修复(附加重装显卡驱动方法)
- 一种很轻松的Excel关键字方式进行网页Web自动化测试(Java+Selenium+TestNG+Excel)
- 22考研初试410数一145上岸上海交通大学819经验分享
- js中判断两个对象是否相等。
- 问题 : 我们的征途是星辰大海
- 关于HIPO和IPO
- IC基础知识(八)ROM、PROM、EPROM、EEPROM和Flash之间的区别
- mmse评估量表_简易精神状态评价量表(MMSE量表)
- Unity3d使用鼠标点击控制人物走动无效的问题
- vs2019 无法打开包括文件:“SDKDDKVer.h”: No such file or directory的有效解决方案
热门文章
- 临界区、互斥量、事件、信号量四种方式
- 【蓝蜗牛】骨龄检测(一)
- spring-kuang
- 94---Python 极坐标系下绘制双曲螺旋线
- FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap
- 仿ifeng可翻阅上下滚动新闻
- 冲量在线荣获2021中关村国际前沿科技创新大赛TOP10
- 湖北大学计算机系宿舍,武汉高校宿舍大揭底!原来还有宿舍这么坑爹...
- POJ3255(次最短路)
- 网易为什么成门户唯一常青树?从几个产品说起