3. B. Milena and Admirer(贪心、小结论、思维)

题目链接

B. Milena and Admirer

题意

给一个长度为 n n n的序列,我们通过操作使这个序列变成非递减序列
操作:对 a [ i ] a[i] a[i],我们将 a [ i ] a[i] a[i]删除,将 a [ i ] − x 、 x a[i]-x、x a[i]xx插入原位置,要求 x < a [ i ] x<a[i] x<a[i]
求最小的操作次数

题解

考虑贪心
对于满足 a [ i ] < = a [ i + 1 ] a[i]<=a[i+1] a[i]<=a[i+1] i i i我们不去操作
对于不满足条件的 i i i,我们考虑将 a [ i ] a[i] a[i]拆成k个满足条件并且尽可能大的数。(这里k最多为 a [ i ] − 1 a[i]-1 a[i]1因为一个数最多全部拆成1)。
考虑如何拆才能使答案最优,我们希望当前拆完的数尽可能大,在满足拆完的所有数都小于 a [ i + 1 ] a[i+1] a[i+1]的情况下。,因为我们当前拆完的数的最小值会影响前面的数的拆分,我们肯定是希望拆完之后最小值最大的,如何才能达到最小值最大呢?
考虑去平均拆。
对于 a [ i + 1 ] > a [ i ] a[i+1]>a[i] a[i+1]>a[i]需要将拆 c n t = a [ i ] / a [ i + 1 ] + ( a [ i ] cnt=a[i]/a[i+1]+(a[i]%a[i+1]!=0) cnt=a[i]/a[i+1]+(a[i]成这么多个数,需要拆
c n t − 1 cnt-1 cnt1次,还需要去维护一个最小值 a [ i ] / c n t a[i]/cnt a[i]/cnt,从后往前扫一遍维护最小值,统计答案即可。

代码

#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_backusing namespace std;void solve() {int n;cin>>n;vector<int>a(n+1);rep(i,1,n) {cin>>a[i];}int cur=1e9;int ans=0;//倒着枚举一遍fep(i,n,1) {if(a[i]<cur){cur=a[i];}else if(a[i]%cur==0){ans+=a[i]/cur-1;}else{int cnt=a[i]/cur+1;ans+=(cnt-1);cur=a[i]/cnt;}}cout<<ans<<endl;
}signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//	freopen("1.in", "r", stdin);int _;cin>>_;while(_--)solve();return 0;
}

总结

这道题目主要是要想清楚对于一个数如何拆分才能对后面的影响最小。


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

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

相关文章

Oracle19c | 操作归纳

本篇目录 1. PDB 可插拔数据库1.1 创建 PDB 1. PDB 可插拔数据库 1.1 创建 PDB # oralce 19c 创建 pdb CREATE PLUGGABLE DATABASE pdb_name ADMIN USER username IDENTIFIED BY password; # oralce 19c 启用数据库 ALTER PLUGGABLE DATABASE pdb_name OPEN; # 切换 pdb alte…

【感知算法】Dempster-Shafer理论(下)

尝试DS理论应用到自动驾驶地图众包更新。 地图特征变化判断 a mass function is applied to quantify the evidence of the existence. existence state: existenct、non-existent、tenative、conflict ∃ ∄ Ω ϕ \exist \\ \not\exist \\ \Omega \\ \phi ∃∃Ωϕ ma…

对 babel 的了解,几个 stage 代表的意思

What is Babel? Babel Babel 是一个广泛使用的 JavaScript 编译器&#xff0c;它主要用于将 ECMAScript 2015&#xff08;ES6&#xff09;代码转换为向后兼容的 JavaScript 版本&#xff0c;以便在不同浏览器和环境中运行。Babel 具有强大的插件系统&#xff0c;可以通过插件…

阿里云服务器多少钱?2024年阿里云服务器价格配置表出炉!

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

docker的底层原理六: 联合文件系统(UnionFS)

Docker的底层存储原理基于联合文件系统&#xff08;UnionFS&#xff09;。 联合文件系统&#xff08;UnionFS&#xff09;是一种特殊的文件系统&#xff0c;它允许独立地叠加多个目录层&#xff0c;呈现给用户的是这些目录层的联合视图。这种结构使得在Docker中&#xff0c;不…

【xlwings】结合pandas做类似vlookup的功能

参考自CSDN 导入模块 import pandas as pd import xlwings as xw创建sheet #创建excel文档wb xw.Book() # 创建一个Excel进程App, 并在App中新建一个Book,Book下自动创建一个Sheetwb.save(文件)##excel表显示设定appxw.App(visibleFalse,add_bookFalse)app.display_alertsF…

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中&#xff0c;使用非gui的方式执行jmeter。若需更改参数&#xff0c;必须先编辑jmx文件&#xff0c;找到对应的变量进行修改&#xff0c;比较麻烦。因此&#xff0c;可以参数化一些常用的变量&#xff0c;直接在Jmeter命令行进行设置 二、参数…

尚硅谷ES基础 - RESTful JSON基本概念倒排索引HTTP

RESTful & JSON REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。…

自动驾驶中之定位总结

1 前言2 典型的单个定位方式2.1 基于通信的定位方法2.1.1 GNSS 全球卫星导航系统2.1.1.1 gnss的优点与缺点2.1.1.2 gnss定位技术2.1.1.2.1 RTK定位技术2.1.1.2.2 PPP定位技术 2.1.1.2 gnss定位技术总结 2.1.2 车联网定位 2.1 基于航位推算的定位方法2.1.1 惯性测试单元定位IMU2…

Microsoft Office Visio 2007中绘制大括号

文章目录 一、Microsoft Office Visio 2007中绘制大括号 一、Microsoft Office Visio 2007中绘制大括号 在Microsoft Office Visio 2007中绘制大括号的方法如下&#xff1a; 打开Visio 2007——文件——形状——其他Visio方案——标注 此时左侧栏中出现“标注”栏&#xff0c…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

Hive 窗口函数札记

窗口函数的理解是hive函数里的一个高阶内容&#xff0c;把一些容易混淆的做个记录&#xff0c;以方便随时查看。 1&#xff1a;ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING 含义&#xff1a; 这个定义表示窗口范围从当前行的前任意多行开始&#xff08;包括最早的行&a…

Miniconda 安装和使用笔记

Miniconda是Anaconda的简化版, 可以管理多个Python版本的环境. 实际使用的话, 占用的空间不会很小, 我跑一些正常的应用后, 安装目录占用空间4.3GB, 安装建议要预留10到20G的空间. 安装 Miniconda 下载安装包 https://docs.anaconda.com/free/miniconda/历史版本 https://re…

Discuz! X收藏列表页调用封面图片详细教程

Discuz! X默认收藏列表不显示封面图&#xff0c;我们接到客户需求要开发封面图功能在帖子列表&#xff0c;这是我们整理好的详细教程&#xff0c;下载即可查看 修改后&#xff0c;显示封面的收藏列表截图&#xff1a; 详细开发教程下载地址&#xff1a;Discuz! X收藏列表页调用…

【9】知识存储

一、图数据库neo4j Neo4j是一个高性能的,NOSQL图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。单节点的服务器可承载上亿级的节点和关系&#xff0c;单节点性能不够时也可进行分布式集群部…

提升认知水平和防止偏见浅谈

提升认知水平和防止偏见浅谈 《庄子外物》&#xff1a;井蛙不可语海&#xff0c;夏虫不可语冰。 不要跟井底的青蛙谈论大海&#xff0c;因为它的认知只有井底那么大&#xff0c;大海对于它来说是认知盲区&#xff1b;不要与夏虫去谈论冰雪&#xff0c;因为夏虫一生很短没有经历…

5. D. In Love(贪心)

题目链接 D. In Love 题意 线段的集合&#xff0c;有两种操作 插入一个线段删除一个线段 每次操作后都要去查询是否存在两个线段不相交 题解 首先先看两个线段不相交需要满足什么条件 也就是较 大 l > 小 r 大l>小r 大l>小r即可满足不相交 我们进行推广 当集合…

big three(c++)

"Big Three"是指在C类中需要手动实现的三个特殊成员函数&#xff0c;分别是拷贝构造函数&#xff08;Copy Constructor&#xff09;、拷贝赋值运算符&#xff08;Copy Assignment Operator&#xff09;和析构函数&#xff08;Destructor&#xff09;。这三个函数通常…

手撕qsort函数

前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注​​个人主页&#xff1a;逸狼 更多优质内容&#xff1a; 拿捏c语言指针&#xff08;上&#xff09; 拿捏c语言指针&#xff08;中&#xff09; 拿捏c语言指针&#xff08;下&…

【数据结构/c++】求解有向无环图DAG的关键路径

#include<cstring>//memset头文件 #include<algorithm>//fill头文件 #include<vector> #include<stdio.h> #include<stack> #include<queue> using namespace std; const int MAXV510; struct Node{int v,w;Node(int _v,int _w):v(_v),…