最长上升子序列(LIS)和最长公共子序列(LCS) 模板
首先介绍一下什么是最长上升子序列
举一个例子 2 1 5 3 6 4 8 9 最长上身子序列是 1 3 4 8 9(不连续)
#include <iostream>
#include <algorithm>
using namespace std;
int a[1001],ans[1001],len;
int main()
{int n,T;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];ans[1]=a[1];len=1;for(int i=2;i<=n;i++){if(a[i]>ans[len])ans[++len]=a[i];else{int pos=lower_bound(ans,ans+len,a[i])-ans;ans[pos]=a[i];}}cout<<len<<endl;}return 0;
}
LCS 最长公共子序列
例如:
对序列 1,3,5,4,2,6,8,7和序列 1,4,8,6,7,5 来说
序列1,8,7是它们的一个公共子序列。
请注意: 空序列是任何两个序列的公共子序列。
例如: 序列1,2,3和序列4,5,6的公共子序列只有空序列。
<1>动态规划
eg:
abcfbc abfcab
programming contest
abcd mnp
Output
4
2
0
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
ll dp[1001][1001];
char str1[1111],str2[1111];
int main()
{while(~scanf("%s%s",str1+1,str2+1)){str1[0]='.';str2[0]='.';ll len1=strlen(str1);ll len2=strlen(str2);memset(dp,0,sizeof(dp));for(ll i=1; i<len1; i++){for(ll j=1; j<len2; j++){if(str1[i]==str2[j])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}printf("%lld\n",dp[len1-1][len2-1]);}return 0;
}
最长上升子序列(LIS)和最长公共子序列(LCS) 模板相关推荐
- 动态规划---最长公共子序列
1.问题描述 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切的说,若给定序列X={x1,x2,-,xm},则另一序列Z={z1,z2,-,zk},X的子序列是指存在一个严格递增下标序列 ...
- 动态规划算法解最长公共子序列LCS问题
动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...
- 最长公共子序列问题LCS
最长公共子序列问题LCS 问题描写叙述: 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说.若给定序列X= { x1, x2,-, xm},则还有一序列Z= {z1, z2,-, z ...
- 程序员编程艺术第十一章:最长公共子序列(LCS)问题
程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...
- 最长公共子序列(LCS)算法
一.最长公共字串与最长公共子序列 最长公共子串(Longest Common Substirng) 子串是串的一个连续的部分,子串中字符的位置必须连续. 例如:有两个字符串ABCBDAB 和 BDCA ...
- 动态规划算法——最长公共子序列求法
给定序列X={ X1,X2,....Xn }.Y={ Y1,Y2,...Ym }找出它们的最大子序列Z={ Z1,Z2,...Zk }比如:X={ A,B ,C,B,D,A,B }.Y={ B,D,C ...
- java lcs_Java算法之最长公共子序列问题(LCS)实例分析
本文实例讲述了Java算法之最长公共子序列问题(LCS).分享给大家供大家参考,具体如下: 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= { x1, x ...
- 动态规划篇——最长公共子序列(c++)
引言:最长公共子序列属于动态规划的基础篇,由字符串的最长公共最序列可以引出很多的问题. 最长子序列详细讲解以及练习题目 需要详细讲解教程的可以观看上面链接的文章,以下是自己做的简单的概括. 一.何为最 ...
- python实现最长公共子序列(LCS)
1.找到公共子序列的长度 若a为空或b为空,最长公共子序列为0 若a[m-1] == b[n-1](a的最后一个元素 == b的最后一个元素),那么a[:m]和b[:n]的公共子序列就是a[:m-1] ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
最新文章
- Apache配置代理服务器的方法(1)
- 学会这几个公式技巧,瞬间你就是高手
- MVC 自定义IModelBinder实现json参数转Dictionarystring, string
- mysql 官方镜像_运行官方mysql 镜像
- boost Mutex
- flex states的用法
- ubuntu修改文件夹权限
- 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询
- Bootstrap 表单
- java随机数生成字母,手撕面试官
- vue-video-player 一款vue的前端视频播放插件 支持m3u8
- 最新消息!OKR周报新模板!
- 深度置信网络python3实现
- 给Java程序猿们推荐一些值得一看的好书
- 高频面试题—聊一下Euraka的注册原理
- win7升级RDP至8.1
- 【模型 6.0】以前的你遇事不知所措,现在的你可以镇定自若,靠它!
- 简单python爬虫爬取游戏wiki立绘
- Android11 禁止第三方APP安装,通过白名单管理
- 盘丝洞服务器维护,斗战神史上最大规模合服:涉及60个服务器