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——最长公共子序列相关推荐

  1. 最长公共子序列算法 java_转【算法之动态规划(三)】动态规划算法之:最长公共子序列 最长公共子串(LCS)字符串相似度算法...

    1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 2.最长公共子串 其实这是一个序贯决策问题 ...

  2. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  3. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  4. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  5. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  6. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

  7. 触类旁通,经典面试题最长公共子序列应该这么答

    作者 |  labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...

  8. 模板 - 最长上升子序列与最长公共子序列

    整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...

  9. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

最新文章

  1. proftpd登陆速度慢的解决[转]
  2. SCOM 2012系列⑨单台服务器拓扑监控
  3. -ms-,-moz-,-webkit-,-o-含义及各浏览器内核整理
  4. 存储知识:数据一致性、分级存储、分层存储与信息生命周期管理
  5. 【Python】字典(Dictionary) items()方法
  6. DataWorks搬站方案:Azkaban作业迁移至DataWorks
  7. mysql数据库with ur_Python使用MySQL数据库(新)
  8. python外卷(12)-sort(),sorted(),ord(),chr()
  9. RabbitMQ实例教程:主题交换机
  10. 大数据技术综合分析!数据采集与预处理
  11. Ubuntu引导文件丢失,grub修复(附加重装显卡驱动方法)
  12. 一种很轻松的Excel关键字方式进行网页Web自动化测试(Java+Selenium+TestNG+Excel)
  13. 22考研初试410数一145上岸上海交通大学819经验分享
  14. js中判断两个对象是否相等。
  15. 问题 : 我们的征途是星辰大海
  16. 关于HIPO和IPO
  17. IC基础知识(八)ROM、PROM、EPROM、EEPROM和Flash之间的区别
  18. mmse评估量表_简易精神状态评价量表(MMSE量表)
  19. Unity3d使用鼠标点击控制人物走动无效的问题
  20. vs2019 无法打开包括文件:“SDKDDKVer.h”: No such file or directory的有效解决方案

热门文章

  1. 临界区、互斥量、事件、信号量四种方式
  2. 【蓝蜗牛】骨龄检测(一)
  3. spring-kuang
  4. 94---Python 极坐标系下绘制双曲螺旋线
  5. FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap
  6. 仿ifeng可翻阅上下滚动新闻
  7. 冲量在线荣获2021中关村国际前沿科技创新大赛TOP10
  8. 湖北大学计算机系宿舍,武汉高校宿舍大揭底!原来还有宿舍这么坑爹...
  9. POJ3255(次最短路)
  10. 网易为什么成门户唯一常青树?从几个产品说起