千字长文!C++每日一练——Day3

news2024/11/17 17:45:31

🐑本文作者:C++橙羊🐑

🎮🔊本文代码适合编译环境:DEV-C++💻

✨🧨温馨提示:此文乃作者心血,如要转载请标注版权,否则视为抄袭!🎉🎠

今天橙羊继续为大家带来每日一练,话不多说,看题: 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

注意: 

下面的题目中:

橙色字是废话(可以不看

红色字是数组大小

蓝色字是目的

月度开销

题目描述

Farmer John是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算并记录下了接下来 N (1 ≤ N≤ 100,000) 天里每天需要的开销。Farmer John打算为连续的M(1 ≤ M≤ N) 个财政周期创建预算案,他把一个财政周期命名为一个fajo月。每个fajo月包含一天或连续的多天,每天都被恰好包含在一个fajo月里。

约翰的目标是合理安排每个fajo月包含的天数,使得开销最多的fajo月的开销尽可能少。

输入格式

第一行包含两个整数N,M,用单个空格隔开。

接下来N行,每行包含一个1到10000之间的整数,按顺序给出接下来N天里每天的开销。

输出格式

一个整数,即最大月度开销的最小值。

输入输出样列

输入样例1:

7 5
100
400
300
100
500
101
400

输出样例1:

500

【耗时限制】1000ms 【内存限制】64MB

题目是什么意思呢?我们拿样例举个栗子

 

若约翰将前两天作为一个月,第三、四两天作为一个月,最后三天每天作为一个月,则最大月度开销为500。其他任何分配方案都会比这个值更大。

那么,这道题第一眼你就会想到——枚举

那枚举可以吗?我们来试一试

题目要求最大月度开销的最小值,从小到大枚举所有可能值,判断是否可行。

枚举需要确定上下界,那么最大月度开销可能的最小值最大值分别是多少?

最小值:如果可以分解为N个fajo月,可以获得最小值:“消耗最大的那一天的消耗”

最大值:如果只可以分解为1个fajo月,可以获得最大值:“所有天消耗的总和”。

即从小到大枚举最大月度开销的值x,判断是否可行,首个可行的值就是问题的解。

那么这段代码就是:

for(int x=minn;x<=maxn;x++){
    if(check(x)){
        ans=x;
        break;
    }
}

 那么如何判断答案x是否满足要求?

将每一天安排进一个fajo月,在每个fajo月的花销不超过X的前提下,判断所需的fajo月是否<=M。

时间复杂度:O((maxn-minn)*n)

这不明摆着超时嘛……

那么能不能优化呢?答案是——能!

首先问两个问题:如果答案x不可行(需要的fajo月 > M),那么x − 1有没有可能可行?

不可能,因为答案越小,需要分隔出的fajo月越多, 如果x不可行,那么x−1需要更多的fajo月,更不可行,同理所有

                             如果答案x可行(需要的fajo月 <= M) ,那么x+1有没有可能可行?

一定可行,因为答案越大,需要分隔出的fajo月越少, 如果x可行,那么x+1需要的fajo月一定不大于x ,所以一定可行。但是题目要求答案越小越好,所以如果x可行,那么所有>x的值都不用考虑了。

所以可以知道:该问题的答案具有单调性。

既然是单调性,那就有了——二分答案下界

所以……解析?

解析+注释:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n,m;
bool check(int x){//判断函数 
	int fajo=1,sum=a[1];
	for(int i=2;i<=n;i++){
		if(sum+a[i]<=x){
			sum+=a[i];
		}
		else{
			fajo++; 
			sum=a[i];
		}
	}
	return fajo<=m;
} 
int main()
{
	cin>>n>>m;
	int l=0,r=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		l=max(l,a[i]);//最大值为每天花费的累加和 
		r+=a[i];//最小值为花费最多的那天的累加和 
	}
	r++;//二分答案一般为左闭右开 
	while(l<r){
		int m=(l+r)/2;
		if(check(m))r=m;//如果满足就尝试更小的 
		else l=m+1;
	}
	cout<<l;//求下界,l是首个满足条件的值 
	return 0;
}

好了,今天就到这了。我是橙羊,拜拜~

 

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

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

相关文章

多线程——线程同步器CountDownLatch

多线程——线程同步器CountDownLatch&#xff08;一&#xff09;CountDownLatch案例入门【1】CountDownLatch和join的区别【2】CountDownLatch案例一&#xff1a;等待线程等待工作线程【3】CountDownLatch案例二&#xff1a;主线程main等待子线程【4】CountDownLatch案例三&…

.NET Conf China 2022 精彩回顾 | IOT专场

12月充满惊喜 各种美好的节日纷至沓来 奖励一年辛苦劳作的我们 本月程序员第一场节日 就是精彩的 .NET Conf China 2022 .NET Conf China 2022是面向开发人员的社区峰会&#xff0c;延续 .NET Conf 2022的活动&#xff0c;庆祝 .NET7的发布和回顾过去一年来 .NET在中国的发…

举个栗子~Alteryx 技巧(4):教你设置 Alteryx Server 用户权限

分析用户在用 Alteryx Designer 创建好工作流之后&#xff0c;如何在企业内部实现共享和管理分析工作流程、模型及数据呢&#xff1f;方法很简单&#xff1a;发布到 Alteryx Server &#xff01; Alteryx Server 通过内置的数据治理、集中管理的安全性和高可用性&#xff0c;可…

svn:E720005 move .svn/tmp拒绝访问

cleanup也clean不了 此时要用sqlite3.exe来解决了到有.svn的目录地下&#xff0c;把sqllite3.exe拷贝到这个下面 在目录里面打开cmd窗口&#xff0c;执行 sqlite3 .svn/wc.db "select * from work_queue" 如果查出内容&#xff0c;那么执行 sqlite3 .svn/wc.db …

【Dubbo3高级特性】「性能优化技术」Dubbo3完成扩展使用高效的Kryo和FST序列化开发实战

系列文章目录 如果你看到了这里&#xff0c;那么接下来你将会认识Dubbo3的诞生将如何引领微服务领域更进一步&#xff0c;从而迈入云原生的领域&#xff0c;这当然不仅仅是Dubbo3&#xff0c;之前也介绍了Java生态另外一个云原生领域的技术Quarkus等技术&#xff0c;而本文内容…

Spring Boot 实现微信点餐系统

架构 前后端分离&#xff1a; 部署架构&#xff1a; 补充&#xff1a; setting.xml 文件的作用&#xff1a;settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。 maven的作用…

校招求职经验分享——我是如何本科进入大厂的

写在开头 最近签完了三方&#xff0c;大学前三年的生涯规划和努力最终还是得到了兑现&#xff0c;脑子里不断涌现这几年来的经历&#xff0c;一直想着写点什么东西记录一下&#xff0c;刚好大四空闲时间真的太多&#xff0c;心血来潮&#xff0c;不如还是写写吧&#xff0c;记录…

mysql cdc 整库迁移 (mysql to mysql)

技术思想 利用 mysql catalog&#xff0c;mysql cdc&#xff0c;flink jdbc 等技术实现 mysql 整库迁移至下游数据库&#xff0c;这里是示范 mysql to mysql &#xff0c;其他 sink 组件可自行扩展实现。 通过 flink ParameterTool&#xff0c;可以选择是整库同步还是多表亦或…

2023年天津天狮学院专升本报名考试的安排

天津天狮学院2023年高职升本科考试报名时间安排的通知 一、报名条件 报名条件和具体要求按照天津市招生委员会的文件规定执行。考生必须完成文化课报名环节&#xff0c;且填报天津天狮学院志愿&#xff0c;且具备我校提出的线上考试条件&#xff0c;方可报考我校专业课考试。考…

Java作业

这里写自定义目录标题java16次作业新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是…

python-网络编程

python-网络编程 网络编程的理论概述&#xff1a; 现在的生活离不开网络&#xff0c;例如手机&#xff0c;电脑&#xff0c;平板&#xff0c;都是网络的代名词&#xff0c;通过一些APP&#xff0c;浏览器&#xff0c;获取大量的信息如 文字、声音、视频&#xff0c;这都是从网…

[Linux]------线程同步和信号量

文章目录前言一、条件变量同步概念与竞态条件条件变量函数初始化销毁等待条件满足唤醒等待为什么pthread_cond_wait需要互斥量&#xff1f;条件变量使用规范二、生产者消费者模型为何要使用生产者消费者模型生产者消费者模型的优点基于BlockingQueue的生产者消费者模型C queue模…

1.MyBatis简介

1.概念 MyBatis是一款开源的持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。 与其它ORM框架不同&#xff0c;MyBatis没有将Java对象与数据表关联起来&#xff0c;而是作为Java方法和SQL语句的桥梁&#xff0c;一般称它为“半自动化ORM”框架。 2.Mybatis架构 …

【软件测试】在我刚上岗时,资深测试给我的建议让我受益匪浅......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 建立测试基线 当我还…

BNB Chain对Zebec生态大力扶持,ZBC或继续登录一线平台

在行业早期开始&#xff0c;流支付赛道就已经具备了早期的轮廓&#xff0c;而在流支付协议Zebec Protocol出现后&#xff0c;该领域被推向了一个新的发展高度&#xff0c;并得到加密领域以及传统商业领域的高度关注。而随着生态的商业进展不断推进、生态不断壮大&#xff0c;Ze…

C++代码优化(1):条款1~4

"不要烟火不要星光&#xff0c;只要问问你内心的想法。" 本栏仅仅 由对《Effictive C》其中的一系列条款&#xff0c;掺杂着自己一些愚钝的理解而写的。 ---前言 条款01: 尽量以const、enum、inline 替换 #define 在谈及上述好几个关键字 与define宏定义的关系&…

Intel i226芯片4端口千兆以太网卡 2.5GPoE工业相机图像采集卡介绍

PCIe-8634图像采集卡是一款基于 Intel i226芯片高性能千兆工业级 PCIe*4 POE网卡,具有传输速度高、兼容性强、性能稳定的特点&#xff0c;可广泛主要应用于网络高清监控、无线覆盖、工业自动化等领域。 RJ45千兆网络采用4 k Intel226千兆网络芯片,支持10/100/1000/2500Mbps传输…

microservices 简介

油鹳视频 Microservices explained - the What, Why and How? https://www.youtube.com/watch?vrv4LlmLmVWk&t2s microservices 是一种软件体系结构&#xff0c; microservices architecture(微服务架构) 是与传统的 monolithic architecture(整体式架构&#xff0c;一体…

微信转盘抽奖小程序如何制作?

微信转盘抽奖小程序如何制作&#xff1f;大概需要多少钱&#xff1f; 价格方面&#xff0c;平台按年收费&#xff0c;一年1498至2498元。 明码标价&#xff0c;7天退款制度&#xff0c;随时退。 微信转盘抽奖小程序如何制作步骤: 1.进入第三方微信转盘抽奖小程序制作平台官…

计算机结构体系:指令调度与循环展开题型 (非凭感觉的方法详解)

文章目录题目初始分析1.确定所使用的各个寄存器的作用2.将循环体内容语句和控制语句分开3.找出每一条循环体内容指令的代价并排序4.找出每一条循环体控制指令的代价并排序5.基于贪婪算法的最优循环展开体系结构这门课程中&#xff0c;指令调度和循环展开可以说是课程最困难的地…