唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧。

首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判一下是不是相等就可以了。

最长不下降子序列代码:

1 #include

2 #include

3 using namespacestd;4 intn;5 int a[1100];6 int f[1100];7 intmain()8 {9 scanf("%d",&n);10 for(int i=1;i<=n;++i)scanf("%d",&a[i]);11 for(int i=1;i<=n;++i)12 {13 f[i]=1;14 for(int j=1;j=a[j]&&f[j]+1>f[i])f[i]=f[j]+1;16 }17 int ans=0;18 for(int i=1;i<=n;++i)19 ans=max(ans,f[i]);20 printf("%d",ans);21 return 0;22 }

View Code

最长上升子序列代码:

1 #include

2 #include

3 using namespacestd;4 intn;5 int a[1100];6 int f[1100];7 intmain()8 {9 scanf("%d",&n);10 for(int i=1;i<=n;++i)scanf("%d",&a[i]);11 for(int i=1;i<=n;++i)12 {13 f[i]=1;14 for(int j=1;ja[j]&&f[j]+1>f[i])f[i]=f[j]+1;16 }17 int ans=0;18 for(int i=1;i<=n;++i)19 ans=max(ans,f[i]);20 printf("%d",ans);21 return 0;22 }

View Code

233333,如果不仔细看你会以为这2份代码是一样的,仔细看你会发现相似度99%。

但是窝分不清 的当然不是n^2的求法,而是nlogn的求法,之所以分不清,还是因为窝太弱了,窝用的二分从来都是stl,所以会经常搞混该用lower_bound还是upper_bound qwq

先来说一下nlogn的求解思想,令f[i]代表长度为i的所有最长不下降子序列的最后一位的最小值是多少。为什么要记录最小是多少那?因为我们想要这个序列最长,那么只有末尾最小才能有更多的数接到它的后面构成一个更长的序列。这时我们就能得到一个性质:f数组是递增的。证明:f[i]代表的是长度为i的最长不下降子序列的结尾最小的数,如果它后面来了一个比它大的数,那么这个数一定能构成至少长度为i+1的最长不下降子序列,所以在f数组里一定不会比它的位置靠前。

所以开一个变量len来记当前找到的最长不下降子序列有多长了,如果a[i]>=f[len],那么直接放到f[len]后面,并且len++,但是如果a[i]

有一个值得说明的点是f数组只是用来记录结尾的数的,f数组连起来并不是一个最长不下降子序列

最长上升子序列也是一样的道理,只不过由于要求严格递增,所以要替换的是大于等于它的第一个数

唔,二分用的2个stl分别是lower_bound和upper_bound,第一个是求大于等于一个数的第一个数的位置,第二个是求大于一个数的第一个数的位置。

最长上升子序列nlogn算法:

1 #include

2 #include

3 #include

4 using namespacestd;5 intn;6 int a[100005],f[100005];7 intmain()8 {9 scanf("%d",&n);10 for(int i=1;i<=n;++i)scanf("%d",&a[i]);11 f[1]=a[1];int len=1;12 for(int i=2;i<=n;++i)13 {14 if(a[i]>f[len])f[++len]=a[i];15 else{16 int tmp=lower_bound(f+1,f+len+1,a[i])-f;17 f[tmp]=a[i];18 }19 }20 cout<

View Code

最长不下降子序列nlogn算法:

1 #include

2 #include

3 #include

4 using namespacestd;5 intn;6 int a[100005],f[100005];7 intmain()8 {9 scanf("%d",&n);10 for(int i=1;i<=n;++i)scanf("%d",&a[i]);11 f[1]=a[1];int len=1;12 for(int i=2;i<=n;++i)13 {14 if(a[i]>=f[len])f[++len]=a[i];15 else{16 int tmp=upper_bound(f+1,f+len+1,a[i])-f;17 f[tmp]=a[i];18 }19 }20 cout<

View Code

其实相似度也是99%,233333333

最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列相关推荐

  1. java 虚拟机_浅谈Java虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  2. 3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降...

    机器学习三要素 上次的报告中,我们介绍了一种用于求解模型参数的迭代算法--梯度下降法.首先需要明确一点,即"梯度下降算法"在一个完整的统计学习流程中,属于什么?根据<统计学习 ...

  3. scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都 ...

  4. c语言实现md5比java难_浅谈md5弱类型比较和强碰撞

    前言 在CTF中,md5的题目太常见了,虽然有很多这方面的文章,但相对来说比较零散,这里主要将自己学习和比赛时遇到的md5弱类型和强碰撞的题目从浅到深地梳理一下. 本文涉及知识点实操练习:浅谈md5弱 ...

  5. java 小偷_浅谈小偷程序之Java

    浅谈小偷程序之Java 题外话:如果用EditPlus作为编辑器的话如果保存的格式默认为unicode的话那么在里面写中文用resin作为应用服务器的话就可能出现报500 Servlet错误哦!主要是 ...

  6. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

  7. 手机java软件_浅谈软件开发就业前景

    ​ 我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握软件开发基础技能与知识的软件工程师.目前对软件已达20万并且以每年20 ...

  8. c java多态_浅谈Java多态

    什么是Java中的多态?又是一个纸老虎的概念,老套路,把它具体化,细分化,先想三个问题(注意,这里不是简单的化整为零,而是要建立在学习一个新概念时的思考框架): 1.这个东西有什么用?用来干什么的?它 ...

  9. java 异步_浅谈Java异步编程

    本文来自网易云社区. Java异步编程引言 Java的异步编程其实是一个充分利用计算机CPU资源,不想让主程序阻塞在某个长时间运行的任务上,这类耗时的任务可以是IO操作.远程调用以及高密度计算任务.如 ...

最新文章

  1. opencv学习笔记4:获取图像属性
  2. JXLS 2.4.0系列教程(四)——拾遗 如何做页面小计
  3. MVC3学习 六 HtmlHelper的使用与扩展
  4. Basic4android v3.50 发布
  5. C++ - 类模板(class template) 详解 及 代码
  6. uva 1291 - Dance Dance Revolution ( dp )
  7. Android TTS实现简单阅读器
  8. Silverlight开发的15个最佳实践
  9. 危机中转型,如何获得领导的支持?
  10. 提高芯片在线烧录稳定性的6个方法
  11. 曹雪芹诗歌中的鸿蒙,红楼一梦开辟相痴鸿蒙诗歌
  12. php聊天室禁言时间开发,聊天室技术(五) -- 指挥中心_PHP
  13. VOT数据集报错问题
  14. [元带你学NVMe协议] ] 插槽接口(M.2 / mSATA / SATA )、总线(PCIE / SATA )、传输协议(NVME / AHCI) 图解
  15. SSD测试专题(三)
  16. XB7608AFJ单节锂电池二合一保护芯片
  17. 人群密度检测matlab算法,基于视频的人员密度检测.doc
  18. 解析v-if和v-show的区别和使用场景
  19. virtualbox装WinXP系统
  20. Android实现textView倒影效果ReflectTextView

热门文章

  1. 农用地包括哪些地类_征用土地公告应当包括哪些内容?|楹庭拆迁律师
  2. 无休止加班的真正原因!你们公司是这样吗?
  3. 彻底理解 Redis 的持久化和主从复制
  4. Logback 配置文件这么写,日志 TPS 提高 10 倍
  5. 80%以上Javaer可能不知道的一个Spring知识点
  6. IntelliJ IDEA 2018.1正式发布!什么?还能这么玩?
  7. Pytorch TensorRT
  8. python pycocotools安装
  9. DetNAS ThunderNet
  10. pytorch多进程加载数据