单调递增最长子序列(LIS)【NY】-17
来源:互联网 发布:vb中default是什么意思 编辑:程序博客网 时间:2024/06/05 20:07
点击打开链接
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4- 输入
- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 - 输出
- 输出字符串的最长递增子序列的长度
- 样例输入
3aaaababcabklmncdefg
- 样例输出
137
- 来源
- 经典题目
解析:LIS的裸题,
代码:
1.O( n^2 )
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define INF 0x7fffffffconst int maxn=10005;int dp[maxn];char a[maxn];int main(){int t;scanf("%d",&t);while(t--){scanf("%s",a);int l1=strlen(a);int ans=0;for(int i=0;i<l1;i++){dp[i]=1; //只包含ai的子序列for(int j=0;j<i;j++){if(a[j]<a[i]) //在满足j<i并且aj<ai的以aj为结尾的上升子列末尾,追加上ai后得到的子序列dp[i]=max(dp[i],dp[j]+1);}ans=max(ans,dp[i]);}printf("%d\n",ans);}return 0;}
O( nlogn )
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define INF 0x7fffffffconst int maxn=10005;int dp[maxn];char a[maxn];int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s",a); int l1=strlen(a); fill(dp,dp+l1,INF); for(int i=0;i<l1;i++) *lower_bound(dp,dp+l1,a[i])=a[i]; printf("%d\n",lower_bound(dp,dp+l1,INF)-dp);}return 0;}
阅读全文
0 0
- 单调递增最长子序列(LIS)【NY】-17
- 单调递增最长子序列(Lis)
- 最长单调递增子序列(LIS)
- ny-单调递增最长子序列
- nyoj 单调递增最长子序列 17 (LIS模板)
- nyoj 17 单调递增最长子序列 (LIS)
- NYOJ 17 单调递增最长子序列 (LIS模板)
- NY--17 -- 单调递增最长子序列 [经典DP]
- NYOJ - 17 - 单调递增最长子序列(动态规划--LIS--单调递增最长子序列)
- 最长单调递增子序列-LIS问题
- 最长单调递增子序列LIS
- 单调递增最长子序列(LIS)
- nyoj 17 单调递增最长子序列 【LIS】
- NYOJ 17 单调递增最长子序列(LIS)
- nyoj--17 单调递增最长子序列(LIS)
- 单调递增最长子序列LIS(两种解法)
- 单调递增最长子序列(LIS)&&最长公共子序列(LCS)
- 单调递增子序列LIS (DP)
- 计算器弹琴
- HDU
- Xamarin.Forms 用户界面——控件——Style——显示样式
- TensorFlow
- UVA 11922 Permutation Transformer(Splay【伸展树】的一些操作)
- 单调递增最长子序列(LIS)【NY】-17
- DB2 import 和 load
- 笔记10: 进程控制的基本概念
- 枚举变量的使用和类型声明
- 示波器中,两同频波形相位差的计算
- Windows远程桌面实现之三(电脑内部声音采集,录音采集,摄像头视频采集)
- spring只扫描指定文件注解
- hdu 5583
- linux初学者-DNS配置篇