D4--线性DP1(子段和、LIS)

news2024/11/18 6:13:02

看文先三连,养成好习惯~看文先三连,养成好习惯~看文先三连,养成好习惯~


目录

知识点:

求最大连续子序列:

分解子问题:

1.按区间长度划分

2.按区间起点划分

3.按区间终点划分

状态:

状态转移方程:

最长上升子序列:(LIS)

状态转移方程:

优化:

~题题题题~

最大子段和

题目描述

输入描述

输出描述

样例输入

样例输出

代码

最长上升子序列

题目描述

输入描述

输出描述

样例输入

样例输出

提示

状态转移方程:

代码

拦截导弹

题目描述

输入描述

输出描述

样例输入

样例输出

代码

最长上升子序列2

题目描述

输入描述

输出描述

样例输入

样例输出

提示

代码


知识点:

求最大连续子序列:

分解子问题:

1.按区间长度划分

不符合最优子结构

(最优子结构请看D4--数字三角形-CSDN博客)

2.按区间起点划分
3.按区间终点划分

2.3.差不多

求最大连续子序列的和
下标12345
数组a12-5113
求和sum13-21114
状态:

sum[i]记录连续子序列最后为a[i]时的最大和

状态转移方程:

sum[i]=max(sum[i-1],0)+a[i];

最长上升子序列:(LIS)

i01234567
num[i]312645107
len[i]以num[i]结尾的最长子序列长度11233455

状态转移方程:

len[i]=max(len[j])+1; 范围&条件:1<=j<i,num[j]<=num[i]

优化:

比较顺序

原来:按下标遍历

现在:优先找最长的—NO:从头开始遍历(二分法查找位置)

                                —YES:不需要遍历其他的

~题题题题~

最大子段和

题目描述

       小可喜欢思考人生的意义,她发现每个人的一生不可能一帆风顺,或多或少总要经过坎坷挫折的考验。于是她将人的一生的每个关键时间点以数值表示,快乐越高,分值越高,痛苦值越高,分值越低甚至会成为负数。进一步研究,她又发现人的记忆总是会记住那些快乐的时光,而淡忘痛苦的时光。于是小可想统计出某个人连续最大的一段时光总和是多少。

(一堆废话!!!)

       即给定K个整数的序列{N1, N2, N2,……, NK},其任意连续子序列可表示为{Ni, Ni+1,……, Nj},其中1≤i≤j≤K。

       最大连续子序列是所有连续子序列中元素和最大的一个,例如,给定序列{-2,  11,-4,  13,-5,-2},其最大连续子序列为{11,-4,  13},最大和为20。

输入描述

第一行是一个正整数N<=100000,表示了序列的长度。

第二行包含N个绝对值不大于10000的整数,描述了这段序列。

输出描述

一个整数,为最大的子段和是多少。子段的最小长度为1。

样例输入

7
2 -4 3 -1 2 -4 3

样例输出

4

代码

#include<iostream>
using namespace std;
int n,a[100005],sum[100005];
int maxx=-0x3f3f3f3f;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		sum[i]=max(sum[i-1],0)+a[i];
	}
	int maxx=0;
	for(int i=1;i<=n;i++){
		maxx=max(maxx,sum[i]);
	}
	cout<<maxx;
	return 0;
}

最长上升子序列

题目描述

一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).

你的任务,就是对于给定的序列,求出最长上升子序列的长度。

输入描述

输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。

输出描述

最长上升子序列的长度。

样例输入

7
1 7 3 5 9 4 8

样例输出

4

提示

另一组测试数据

输入

43
486 341 527 189 740 490 388 989 489 711 174 305 844 971 492 998 954 832 442 424 619 906 154 293 395 439 735 738 915 453 748 786 550 871 932 693 326 53 904 732 835 354 364

输出

11 

i01234567
num[i]312645107
len[i]以num[i]结尾的最长子序列长度11233455
状态转移方程:

len[i]=max(len[j])+1; 条件:1<=j<i,num[j]<=num[i]

代码

#include<iostream>
using namespace std;
int n,a[1005],sum[1005];
int maxx=-0x3f3f3f3f;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		int t=0;
		for(int j=1;j<=i;j++){
			 if(a[i]>a[j]){
			 	t=max(t,sum[j]);
			 } 
		}
		sum[i]=t+1;
	}
	int maxx=0;
	for(int i=1;i<=n;i++){
		maxx=max(maxx,sum[i]);
	}
	cout<<maxx;
	return 0;
}

拦截导弹

题目描述

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入描述

输入导弹依次飞来的高度。

输出描述

第一行:最多能拦截的导弹数; 

第二行:要拦截所有导弹最少要配备的系统数。

样例输入

389 207 155 300 299 170 158 65

样例输出

6
2

代码

#include<iostream>
using namespace std;
int a[1005],sum[1005],b[1005];
int k=1,ans=1,f=0;
int maxx=0;
int main(){
	while(cin>>a[k]){
		k++;
	}
	k--;
	for(int i=1;i<=k;i++){
		int t=0;
		for(int j=1;j<=i;j++){
			 if(a[i]<=a[j]){
			 	t=max(t,sum[j]);
			 } 
		}
		sum[i]=t+1;
	}
	for(int i=1;i<=k;i++){
		maxx=max(maxx,sum[i]);
	}
	cout<<maxx<<"\n";
	b[1]=a[1];
	for(int i=2;i<=k;i++){
		f=0;
		for(int j=1;j<=ans;j++){
			if(b[j]>=a[i]){
				b[j]=a[i];
				f=1;
				break;
			}
		}
		if(f==0){
			b[++ans]=a[i];
		}
	}
	cout<<ans;
	return 0;
}

最长上升子序列2

题目描述

给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。

输入描述

第一行包含整数 N。

第二行包含 N 个整数,表示完整序列。

输出描述

输出一个整数,表示最大长度。

样例输入

7
3 1 2 1 8 5 6

样例输出

4

提示

N<=1e5

−10^9≤数列中的数≤10^9

代码

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int a[100005],le[100005],n,ans;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	ans=1;
	le[ans]=a[1];
	for(int i=2;i<=n;i++){
		if(a[i]>le[ans]){
			ans++;
			le[ans]=a[i];
		}
		else{
			int l=1,r=ans;
			while(l<r){
				int mid=(l+r)/2;
				if(le[mid]>=a[i]){
					r=mid;
				}
				else{
					l=mid+1;
				}
			}
			le[l]=a[i];
		}
	}
	cout<<ans;
	return 0;
}

创作不易,点个关注吧~创作不易,点个关注吧~创作不易,点个关注吧~ 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 2024-11-17 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10JavaScript项目2Nextcloud服务器:安全的数据之家 创建周期:2796 天开发语言:PHP, JavaScript协议类型:GNU Affero General Public…

【工具变量】2024-2025年地级市异质性数据、城市分组异质性数据(老工业、环境保护、人口流入、沿海等)

一、数据范围&#xff1a; &#xff08;1&#xff09;南北方城市 &#xff08;2&#xff09;东中西城市 &#xff08;3&#xff09;七大地理区、八大综合经济区 &#xff08;4&#xff09;城市群&#xff0c;长三角珠三角京津冀等 &#xff08;5&#xff09;长江流域沿岸、黄河…

响应式网页设计--css

CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是用来控制网页的外观和布局的语言。它与 HTML 一起工作&#xff0c;通过样式定义网页元素的显示方式。CSS 可以控制多种视觉效果&#xff0c;如字体、颜色、布局、间距等。 基本语法&#xff1a; C…

定时器的小应用

第一个项目 第一步&#xff0c;RCC开启时钟&#xff0c;这个基本上每个代码都是第一步&#xff0c;不用多想&#xff0c;在这里打开时钟后&#xff0c;定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…

基于Hadoop、hive的数仓搭建实践

文章目录 架构图Hadoop搭建Hive 搭建MySQL搭建官网文档下载配置配置hive环境变量配置日志文件配置hive-site 复制mysql 驱动包删除日志包初始化元数据启动metastore服务使用hive CLI启动hiveServer2访问hiveserver2客户端连接beeline shell连接 Dbeaver连接经验 基于HDFS Hive…

跨平台WPF框架Avalonia教程 一

安装 安装 Avalonia UI 模板​ 开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。 要安装 Avalonia 模板&#xff0c;请运行以下命令&#xff1a; dotnet new install Avalonia.Templates 备注 对于 .NET 6.0 及更早版本&#xff0c;请将 install 替换为 --inst…

“fc-async”提供了基本的异步处理能力

在开发中,异步处理已经成为提升系统性能和用户体验的常用方式。然而,传统的@Async注解和基础的异步处理工具在面对复杂的任务场景时,存在局限性。这些局限性包括但不限于高并发环境下的稳定性、任务失败后的恢复机制、以及任务的监控和管理。 开源项目“fc-async”提供了基…

RGB与YCbCr转换算法

目录 RGB与YCbCr转换算法RGB与YCbCr色域介绍RGB模型YCbCr色域简介YCbCr的应用YUV 和 YCbCr 的区别 色彩转换公式 RGB 转 YCbCr 实现RGB 转 YCbCr 的 Matlab 实现RGB 转 YCbCr 的 FPGA 实现 YCbCr 转 RGB 实现YCbCr 转 RGB 的 Matlab 实现YCbCr 转 RGB 的 FPGA 实现 RGB与YCbCr转…

游戏引擎学习第八天

视频参考: https://www.bilibili.com/video/BV1ouUPYAErK/ 理解下面的代码 关于虚函数 代码分解 结构体 foo 的定义&#xff1a; struct foo {int32 X;int64 Y;virtual void Bar(int c); };foo 结构体有两个成员变量&#xff1a;X&#xff08;int32 类型&#xff09;和 Y&…

Vue2教程002:Vue指令

文章目录 2、Vue指令2.1 开发者工具2.2 v-html2.3 v-show和v-if2.4 v-else和v-else-if2.5 v-on2.5.1 内联语句2.5.2 methods 2、Vue指令 2.1 开发者工具 通过谷歌应用商店安装&#xff08;需要科学上网&#xff09;通过极简插件安装 2.2 v-html Vue会根据不同的指令&#x…

计算机视觉 ---图像模糊

1、图像模糊的作用&#xff1a; 减少噪声&#xff1a; 在图像获取过程中&#xff0c;例如通过相机拍摄或者传感器采集&#xff0c;可能会受到各种因素的干扰&#xff0c;从而引入噪声。这些噪声在图像上表现为一些孤立的、不符合图像主体内容的像素变化&#xff0c;如椒盐噪声&…

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息&#xff0c;在MyBatis框架中&#xff0c;首先需要通过SqlSessionFactory创建SqlSession&#xff0c;然后才能使用SqlSession获取对应的Mapper接口&#xff0c;进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

node.js下载安装步骤整理

>> 进入node.js下载页面下载 | Node.js 中文网 >>点击 全部安装包 >>删除网址node后面部分&#xff0c;只保留如图所示部分&#xff0c;回车 >>点击进入v11.0.0/版本 >>点击下载node-v11.0.0-win-x64.zip(电脑是windows 64位操作系统适用) >…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL&#xff0c;可以先做检查连接&#xff1a;

解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题 项目问题问题描述解决方案具体实现 项目问题 在 Jenkins 中使用 Git 参数插件 进行参数化构建&#xff0c;具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度&#xff0c;还能大大提升开发和运维效率。以下是使用…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程&#xff08;9&#xff09;&#xff1a;使用 数据表&#xff08;DataTable 参数&#xff09; 来传递参数 前言一、什么是 datatable 参数&#xff1f;Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Windows内核编程准备

Windows内核编程 驱动 本课程涉及的驱动&#xff0c;是利用驱动程序的高级权限&#xff0c;去做一些用户层不能做的工作&#xff0c;严格来说&#xff0c;这些写出来的东西不能算是驱动&#xff0c;因为它不会驱动任何设备 权限 内核程序是运行在R0级的&#xff0c;因此比应…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

Compressing Pre-trained Models of Code into 3 MB key word: code PLM, compression, GA算法 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3551349.3556964 代码&#xff1a;https://github.com/soarsmu/Compressor.git 【why】 1.问题描述&#xff1a; code LLM …

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实迷宫地…