当前位置: 首页 > news >正文

动态规划之最长上升子序列模板

今天开始更新动态规划的模板(动态规划哪有模板呀!!!)话是这么说,但我们经常做题会发现有些题目有些共性,我们抽取共性总结出来,应付动态规划基础题目还是可以的。

回归正题,我们今天使用(nlogn),时间复杂度来写,模板主要使用Java来写(为什么不用c语言呢,因为c语言的模板太多了呀!!!)

我们解释一下原理吧,我们在求最长上升子序列时,可以秉持着尽量使得结尾的数最小的思想,其实也就是贪心,谁让这个贪心比n的平方的普通动规要低时间复杂度呢。我们开个ArrayList不断往里加数字,如果链表为空就直接加入,不为空,如果加入的数字大于链表尾数字,我们加入到链表末端,如果加入的数字小于链表的末尾数字,我们把它找到在链表中第一个大于它的元素的位置,把它替换为我们要加入的元素。在这里我们使用写好的二分方法,大家要注意我们求的是上升子序列不是不下降子序列,一旦我们在ArrayList里边发现一个和我们加入的数字相同的数字,我们必须

放弃加入。

模板题目:

夏令营:动态规划特训 - 【算法模板题】蓝桥勇士 - 蓝桥云课 (lanqiao.cn)

模板:


import java.awt.FontFormatException;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
public class Main {public static void main(String[] args) throws IOException  {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
int a=sc.nextInt();
int b;
ArrayList<Integer> al1=new ArrayList<>();
for(b=0;b<a;b++) {int c=sc.nextInt();if(al1.size()==0) {al1.add(c);}if(c>al1.get(al1.size()-1)) {al1.add(c);}else {int d=Collections.binarySearch(al1,c);if(d<0) {int e=(-1)*d-1;al1.set(e, c);}}
}
System.out.println(al1.size());}}

http://www.lryc.cn/news/125686.html

相关文章:

  • Python源码05:使用Pyecharts画词云图图
  • MariaDB 10.11.4 安装教程(zip格式,Windows环境)
  • 【Python国内源】pip换源终极方法【Windows】
  • 【elementUi】绘制自定义表格、绘制曲线表格
  • 使用 Python 中的 Langchain 从零到高级快速进行工程
  • 神经网络基础-神经网络补充概念-07-使用计算图求导
  • docker常用指令
  • 【金融量化】对企业进行估值的方法有哪些?
  • Qt+C++自定义控件仪表盘动画仿真
  • 怎样让音频速度变慢?请跟随以下方法进行操作
  • 【C语言】常用的库和作用以及对应的函数
  • Android 12.0 系统systemui下拉通知栏的通知布局相关源码分析
  • java实现docx,pdf文件动态填充数据
  • 【Python2】实现异步进程的创建、终止与资源回收
  • leetcode做题笔记79单词搜索
  • http库 之 OKHttpUtil
  • gitlab合并新项目和分支切换
  • WebStorm修改默认打开的浏览器
  • vue3+vite+pinia
  • ROSpider机器人评测报告
  • 在vue3 中,使用element-plus中的el-scrollbar,让内容元素自动滚动
  • Redis——Redis.conf详解+Redis持久化(RDB和AOF)+Redis订阅发布
  • 16.1.2 Linux 的多用户多任务环境
  • 【11】Redis学习笔记 (微软windows版本)【Redis】
  • 数据结构刷题训练:用栈实现队列(力扣OJ)
  • 数字化车间mes生产执行管理系统
  • SpringBoot + Mybatis多数据源
  • ad+硬件每日学习十个知识点(35)23.8.15 (接口电路:RS232、RS485、RS422,单线协议UART->TTL)
  • sql类型-用户定义表类型
  • 小程序 vant 项目记录总结 使用 scss 分享 订阅消息 wxs 分包 echarts图表 canvas getCurrentPages页面栈