博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【noi 2.6_1759】LIS 最长上升子序列(DP,3种解法)
阅读量:6500 次
发布时间:2019-06-24

本文共 1713 字,大约阅读时间需要 5 分钟。

题意我就不写了。解法有3种:

1.O(n^2)。2重循环枚举 i 和 j,f[i]表示前 i 位必选 a[i] 的最长上升子序列长度,枚举a[j]为当前 LIS 中的前一个数。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int N=1010; 8 int a[N],f[N]; 9 10 int mmax(int x,int y) {
return x>y?x:y;}11 int main()12 {13 int n,ans=0;14 scanf("%d",&n);15 for (int i=1;i<=n;i++) scanf("%d",&a[i]);16 for (int i=1;i<=n;i++)17 {18 f[i]=1;19 for (int j=1;j
a[j]) f[i]=mmax(f[i],f[j]+1);21 ans=mmax(ans,f[i]);22 }23 printf("%d",ans);24 return 0;25 }
View Code 1

2.O(n log n)。继正确但不高效的解法后,我们想要对时间复杂度降维。最常见的做法就是二分查找,这题就是把解法1的 j 的O(n)枚举变为O(log n)的二分。那么二分的范围肯定要包含当前的 LIS 的数,而且要知道这些数对应的 f[ ]值。因此,我们只能保存扫完前 i 个选出的最优的 LIS,上述2个条件都可以满足。同时不断扩大和更新(存尽量小的数)这个序列。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int N=1010; 8 int a[N],f[N]; 9 10 int ffind(int l,int r,int x)11 {12 if (l==r) return l;13 int mid=(l+r)>>1;14 if (x>f[mid]) return ffind(mid+1,r,x);15 else return ffind(l,mid,x);16 }17 int main()18 {19 int n,ans=0;20 scanf("%d",&n);21 for (int i=1;i<=n;i++) scanf("%d",&a[i]);22 f[++ans]=a[1];23 for (int i=2;i<=n;i++)24 {25 int x;26 if (a[i]>f[ans]) x=++ans;27 else x=ffind(1,ans,a[i]);28 f[x]=a[i];29 }30 printf("%d",ans);31 return 0;32 }
View Code 2

3.O(n log n)。(参考自蓝书 p62,挖了坑,没时间填了......)

1 for (int i=1;i<=n;i++) g[i]=INF;2 for (int i=0;i

 

转载于:https://www.cnblogs.com/konjak/p/5906191.html

你可能感兴趣的文章
新人python2和python3的区别_python2 和Python3 的区别
查看>>
hadoopt -cat 命令查看_linux运维命令实践:使用cat命令合并文件和查看文件内容
查看>>
python开发节目程序_Python获取央视节目单的实现代码
查看>>
python的image用法_python使用Image处理图片常用技巧分析
查看>>
JDBC_MySQL_jdbc连接mysql_MySQL
查看>>
新手学习python零基础_新手零基础学习Python第一步,搭建开发环境!
查看>>
mysql cte的好处_Mysql 8 重要新特性 - CTE 通用表表达式
查看>>
zcu106 固化_xilinx zcu106 vcu demo
查看>>
java 打印万年历_Java基础之打印万年历
查看>>
java ftpclient 代码_java后台代码ftpclient下载文件
查看>>
java mina 长连接_MINA实现TCP长连接(二)——服务端实现
查看>>
java数据库生成model_继承BaseModelGenerator 生成Model时添加数据库表字段 生成代码示例...
查看>>
https redirects java_java HttpURLConnection 得到 Redirect 转向的例子
查看>>
java读取html文件并替换_java读取html并替换相关内容
查看>>
java面向对象的概念_java面向对象(上)-- 面向对象的概念
查看>>
dbscan算法python实现_Python实现DBScan
查看>>
java智能聊天软件_Java使用青云客智能聊天接口做一个小助手
查看>>
java定义player类_Java自定义一个异常类NoThisSongException和Player类
查看>>
java 字符串 算法 面试题_java笔试手写算法面试题大全含答案
查看>>
java内部类访问外部类变量 final_Java内部类引用外部类中的局部变量为什么必须是final问题解析...
查看>>