Peter算法小课堂—序列切割

news2024/11/27 5:30:28

讲序列切割之前,先来个铺垫

高手集训

题目描述:

课程表里有连续的n天可以供你选择,每天都有专题课程。其中第i天的专题趣味程度为h[i]。假设你选择了其中连续的若干天,从第l天到第r天。那么,

训练效果 = h[l]*1 + h[l+1]*2 + ... + h[r]*(r-l+1)

随着训练的深入进行,每天的趣味程度会得到更多倍数的效果。

目前有m种训练方案,每种方案由起始时间和结束时间来描述。请对每种方案输出训练效果。

算法分析

这道题目,我们可以死做,然后就会TLE。为了避免TLE,我们引入一种特殊的前缀和。

其中,s[i]为朴素的前缀和,g[i]为编号加权前缀和。

那么,上面为公式的推导。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=100009;
typedef long long ll;
ll n,m,h[N],s[N],g[N];
void input(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>h[i];
	}
}
void BF(){
	for(ll i=1;i<=m;i++){
		ll l,r;
		cin>>l>>r;
		ll ans=0;
		for(ll j=l;j<=r;++j) ans+=h[j]*(j-l+1);
		cout<<ans<<" ";
	}
}
void solve(){
	for(ll i=1;i<=n;i++){
		s[i]=s[i-1]+h[i];
		g[i]=g[i-1]+h[i]*i;
	}
	for(ll i=1;i<=m;++i){
		ll l,r;
		cin>>l>>r;
		ll ans=g[r]-g[l-1]-(s[r]-s[l-1])*(l-1);
		cout<<ans<<" ";
	}
}
int main(){
	freopen("training.in","r",stdin);
	freopen("training.out","w",stdout);
	input();
	if(n<=1000&&m<=1000) BF();
	else solve();
	return 0;
}

这里,我两种算法都放进去了。

防汛指挥

题目描述:

每年夏天,城市的河道都会经历一次汛期的挑战。你作为市长,正在紧锣密鼓的做防汛指挥工作。你所管理的城市有一条中心河道,河道的一侧容易决堤,而这一侧依次排列着n座楼房,编号1到n,其中第i座楼房高度为h[i]。目前你需要将楼房分成若干个相邻连续的区域,由各个区域内部协调防汛资源。若某个连续区域内楼房数量num达到L,则该区域中最矮的 num/L (向下取整) 座楼房会被关闭,其中人员会到区域内其他楼房暂住。若某个连续区域内楼房数量num未到达G,则该区域所有楼房都不可以关闭。通过确定分组管理的方案,本市未关闭的楼房里高度总和最小是多少?

算法分析

首先,这是一道动态规划题。AC动态规划题的心度历程:状态定义→根据样例列表格→找规律→状态转移方程→写代码

定义f[i]表示前i座楼房分组后未关闭的最小高度总和。

给出一组样例:

然后大家列一列表格

/*
f[i]表示前i座楼房分组后未关闭的最小高度总和
n=6,L=3
	i=1 ,2 ,3 ,4 ,5, 6
 h[i]=2  2  5  4  5  1
 f[i]=2  4  7  11 14 15
*/

通过找规律,我们发现

于是,我们的状态转移方程也就呼之欲出了

其中rmq()表示求最小值。

代码

/*
f[i]表示前i座楼房分组后未关闭的最小高度总和
n=6,L=3
	i=1 ,2 ,3 ,4 ,5, 6
 h[i]=2  2  5  4  5  1
 f[i]=2  4  7  11 14 15
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100009;
ll n,L,h[N],bst[N],q[N],f[N],s[N];
void RMQ(){
	int l=0,r=0;
	for(int i=1;i<=n;i++){
		while(l<r&&i-q[l]>=L) l++;
		while(l<r&&h[i]<h[q[r-1]]) r--;
		q[r++]=i;
		bst[i]=h[q[l]];
	}
}
int main(){
	freopen("flood.in","r",stdin);
	freopen("flood.out","w",stdout);
	cin>>n>>L;
	for(int i=1;i<=n;i++) cin>>h[i];
	for(int i=1;i<=n;i++) s[i]=s[i-1]+h[i];
	RMQ();
	for(int i=1;i<=n;i++){
		if(i<L) f[i]=s[i];
		else f[i]=min(f[i-1]+h[i],f[i-L]+s[i]-s[i-L]-bst[i]);
	}
	cout<<f[n]<<endl;
	return 0;
}

结束

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

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

相关文章

WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源

产品概述 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同&#xff0c;每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff0c;还包含有高精度的内部振荡器和可编程定电流控制部分&a…

神经网络复习--数学相关基础知识

文章目录 矩阵范数卷积激活函数信息熵 矩阵 标量&#xff1a;一个标量就是一个单独的数向量&#xff1a;一个向量是一列数。这些数是有序排列的。通过次序中的索引&#xff0c;我们可以确定每个单独的数矩阵&#xff1a;矩阵是一个二维数组&#xff0c;其中的每个元素被两个索…

2023年上半年信息系统项目管理师——综合知识真题与答案解释(4)

2023年上半年信息系统项目管理师 ——综合知识真题与答案解释(4) 61、文档的规范化管理主要体现在&#xff08;&#xff09;方面。 ①文档书写规范 ②文档质量级别 ③图表编号规则 ④文档目录编写标准 ⑤文档管理制度 ⑥文档安全标准 A&#xff0e;①②③④ B&#xff0e;②③…

STM32使用ESP01S连接阿里云物联网平台

一、ESP01S烧录MQTT固件准备 首先准备好烧录工具&#xff0c;可以从官网上进行下载。 MQTT固件官网网址&#xff1a;AT固件汇总 | 安信可科技 (ai-thinker.com) 进去后如下图界面&#xff0c;向下翻找找到MQTT固件&#xff08;1471&#xff09;下载固件即可。 烧录工具光网地…

信号和槽基本概念

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、概述 二、信号的本质 三、槽的本质 一、概述 在 Qt 中&#xff0c;用户和控件的每次交互过程称…

服务器端口怎么开,服务器端口的开放通常涉及的五个关键步骤

服务器端口的开放通常涉及五个关键步骤&#xff0c;包括修改防火墙规则、配置服务器软件以及验证端口是否开放。下面将详细介绍每个步骤。 一、您需要确定需要开放的端口。常见的服务器应用程序端口包括HTTP&#xff08;80端口&#xff09;、HTTPS&#xff08;443端口&#xff…

掌握这个Jenkins插件,离测试开发又近一步!

Jenkins Pipeline是一种可编程的、可扩展的持续交付管道&#xff0c;允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在J…

李开复引领的零一万物开源了Yi-1.5模型,推出了6B、9B、34B三个不同规模的版本

零一万物&#xff0c;由李开复博士引领的AI 2.0公司&#xff0c;近期开源了其备受瞩目的Yi-1.5模型&#xff0c;这一举措再次彰显了公司在人工智能领域的创新实力与开放精神。Yi-1.5模型作为零一万物的重要技术成果&#xff0c;不仅代表了公司在大模型技术研发上的新高度&#…

下载npm I就包错解决方案

npm i xxxx -S --legacy-peer-deps 如果包错就执行以上命令

聚类分析 | 基于GA遗传算法优化kmeans聚类(Matlab)

聚类分析 | 基于GA遗传算法优化kmeans聚类&#xff08;Matlab&#xff09; 目录 聚类分析 | 基于GA遗传算法优化kmeans聚类&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GA-kmeans聚类算法&#xff0c;通过GA遗传算法优化kmeans聚类&…

权力集中,效率提升,中心化模式的优势与挑战

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;权力集中…

电子杂志制作攻略,轻松打造高质量数字出版物

随着数字科技的飞速发展&#xff0c;电子杂志作为一种新型的数字出版物&#xff0c;已经越来越受到人们的青睐。它不仅具有丰富的内容、多样的形式&#xff0c;还具有便捷的传播和阅读方式。如今&#xff0c;电子杂志已经逐渐成为企业、媒体和个人展示自身品牌、传播信息的重要…

AI 图像生成-环境配置

一、python环境安装 Windows安装Python&#xff08;图解&#xff09; 二、CUDA安装 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客 三、Git安装 git安装教程&#xff08;详细版本&#xff09;-CSDN博客 四、启动器安装 这里安装的是秋叶aaaki的安装包 【AI绘画…

自媒体从0-1起号全流程落地指南。(含工具)

下面开始进入主题&#xff1a; 一、持续涨粉的技巧 持续账号的账号通常是具备以下的几种特征 ①利他性&#xff1a;利他性的核心在于你向用户提供了什么&#xff1f; 可以透过逆向思维来体现&#xff0c;首先要明确目标人群及其需求&#xff0c;然后根据这些需求提供必要的…

日本站群服务器的优点以及适合该服务器的业务类型?

日本站群服务器的优点以及适合该服务器的业务类型? 日本站群服务器是指位于日本地区的多个网站共享同一台服务器的架构。这种服务器架构有着诸多优点&#xff0c;使其成为许多企业和网站管理员的首选。以下是日本站群服务器的优点以及适合该服务器的业务类型的分析&#xff1…

Day26 代码随想录打卡|栈与队列篇---有效的括号

题目&#xff08;leecode T20&#xff09;&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以…

Ubuntu系统搭建Tipask开源问答系统并发布公网分享好友远程访问

文章目录 1. 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语…

论文阅读记录--关于水文系统的传递函数

文章目录 J-schuite的文章,地下水系统的响应的功率谱分析--传递函数1. 什么是冲激响应函数与传递函数?2. 地下水流系统中传递函数的求解3. J-schuite文章中传递函数的复现J-schuite的文章,地下水系统的响应的功率谱分析–传递函数 1. 什么是冲激响应函数与传递函数? 在信号…

Java进阶10 IO流

Java进阶10 IO流 IO流就是数据传输。I为input的缩写&#xff0c;表示输入读取&#xff1b;O为out的缩写&#xff0c;表示输出写出。 一、IO流体系结构 ♥巧记区分tips&#xff1a;以Stream结尾的是字节流&#xff1b;以Reader、Writer结尾的都是字符流 二、字节输出流FileOu…

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

前言 很高兴大家来看小编写的文章&#xff5e;&#xff5e; 继【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 继【Flutter】极光推送配置流程(小米厂商通道) 章二 接下配置VIVO/OPPO/华为荣耀的厂商通道 所有截图来源于公司项目&#xff0c;所以会有大量马赛克&am…