UVA - 714 Copying Books(二分+贪心)

BLE天线设计避坑:NRF52832官方50欧姆阻抗匹配的3个常见误区 本文深入解析NRF52832蓝牙SoC天线设计中的常见误区,重点探讨50欧姆阻抗匹配的3个关键问题:PCB板材介电常数差异、匹配元件寄生参数及VSWR测试。通过实测数据和优化方案,帮助工程师规避设计陷阱,提升BLE通信性能。 阅读详情


  Copying Books 

Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and after several months he finished its copy. One of the most famous scribers lived in the 15th century and his name was Xaverius Endricus Remius Ontius Xendrianus (Xerox). Anyway, the work was very annoying and boring. And the only way to speed it up was to hire more scribers.


Once upon a time, there was a theater ensemble that wanted to play famous Antique Tragedies. The scripts of these plays were divided into many books and actors needed more copies of them, of course. So they hired many scribers to make copies of these books. Imagine you have m books (numbered $1, 2, \dots, m$) that may have different number of pages ( $p_1, p_2, \dots, p_m$) and you want to make one copy of each of them. Your task is to divide these books among k scribes, $k \le m$. Each book can be assigned to a single scriber only, and every scriber must get a continuous sequence of books. That means, there exists an increasing succession of numbers $0 = b_0 <b_1 < b_2, \dots < b_{k-1} \le b_k = m$ such that i-th scriber gets a sequence of books with numbers between bi-1+1 and bi. The time needed to make a copy of all the books is determined by the scriber who was assigned the most work. Therefore, our goal is to minimize the maximum number of pages assigned to a single scriber. Your task is to find the optimal assignment.

Input 

The input consists of N cases. The first line of the input contains only positive integer N. Then follow the cases. Each case consists of exactly two lines. At the first line, there are two integers m and k, $1 \le k \le m \le 500$. At the second line, there are integers $p_1, p_2, \dots p_m$ separated by spaces. All these values are positive and less than 10000000.

Output 

For each case, print exactly one line. The line must contain the input succession $p_1, p_2, \dots p_m$ divided into exactly k parts such that the maximum sum of a single part should be as small as possible. Use the slash character (`/') to separate the parts. There must be exactly one space character between any two successive numbers and between the number and the slash.


If there is more than one solution, print the one that minimizes the work assigned to the first scriber, then to the second scriber etc. But each scriber must be assigned at least one book.

Sample Input 

2
9 3
100 200 300 400 500 600 700 800 900
5 4
100 100 100 100 100

Sample Output 

100 200 300 400 500 / 600 700 / 800 900
100 / 100 / 100 / 100 100


题目大意:
一个抄写员要抄n本数,每本书有1<= x <= 10000000页,现在把这些数分配给k个抄书员,要求分配给某个抄写员的编号是连续的,而且每个抄写员的抄写速度是相同的,求所有书抄完所用的最少时间的分配方案。

解题思路:
最大值最小化问题,所花的总时间取决于所有抄写员中所花时间最多的那个人。
该问题可以等价于把n个正整数划分为m个连续子序列。使得其中最大的子序列的和最小。

先用二分法求出是否能满足最大的区间,然后由该区间从后向前遍历,先标记一遍分割的节点,再向前逐个遍历,直到所有的所有的分割线都用完为止结束标记。接着遇到标记为1的就打印分割线,否则不打印分割线。

注意:由于每个数的值不小于1000000,二分时y的值可能很大要用long long 保存。


#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const ll N = 5005;

ll max,min,num[N];
bool vis[N];
ll m,n;
bool separate(ll x) {
	ll k = 0;
	ll sum = 0;
	for(int i = 0; i < n; i++) {
		if(sum + num[i] <= x) {
			sum += num[i];
		}else {
			k++;
			sum = num[i];
		}
		if(k > m-1) {
			return false;
		}
	}
	return true;
}
ll bitSearch() {
	ll x = min, y = max, mid;
	while(x < y) {
		mid = x + (y - x)/2;
		if(separate(mid)) {
			y = mid;
		}else {
			x = mid + 1;
		}
	}
	return x;
}
int main() {
	int t;
	scanf("%d",&t);
	while(t--) {
		scanf("%lld%lld",&n,&m);
		min = -1;
		max = 0;
		for(int i = 0; i < n; i++) {
			scanf("%lld",&num[i]);
			if(min < num[i]) {
				min = num[i];
			}
			max += num[i];
		}
		memset(vis,0,sizeof(vis));
		ll res = bitSearch();
		ll sum = 0,k = 0;
		for(int i = n-1; i >= 0; i--) {
			if(sum + num[i] <= res) {
				sum += num[i];
			}else {
				sum = num[i];
				k++;
				vis[i] = true;
			}
		}
		for(int i = 0; i < n && k < m-1; i++) {
			if(!vis[i]) {
				vis[i] = true;
				k++;
			}
		}
		for(int i = 0; i < n-1; i++) {
			printf("%lld ",num[i]);
			if(vis[i]) {
				printf("/ ");
			}
		}
		printf("%lld\n",num[n-1]);
	}
	return 0;
}


利用 Docker Distribution 搭建私有的 Docker Registry 1、拓扑 阅读详情

相关推荐

Transformer入门(一)——结构

Transformer入门介绍篇,分别介绍了Transformer的总体结构与每个模块的实现原理

yeen123的博客 9424

#二分求最大值的最小值算法

先来一道例题: Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and aft...

Rainfoo的博客 792

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

UVA712 二分 类似正整数分组问题

Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and after sever

Dave_lzw的博客 521

HTPA 32x32d热成像传感器实战指南:从替代MLX90640到精准测温

本文为HTPA 32x32d热成像传感器提供了从硬件连接到精准测温的完整实战指南。针对MLX90640替代需求,详细解析了HTPA传感器的核心优势、IIC通信要点、EEPROM校准数据读取与解析、独特的块数据读取模式,并逐步拆解了五大温度补偿计算流程,旨在帮助开发者克服高开发门槛,实现稳定可靠的非接触式测温应用。

weixin_29279101的博客 313

WiseFlow本地搭建实录---保姆教程

本文介绍了如何从0开始搭建wiseflow的个人情报官的方法,目前所有的API全部都是免费的,对机器没有要求,大家可以放心搭建

liuhui244的博客 1962

UVa714 Copying Books

714 Copying BooksBefore the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a boo

DSL_HN_2002的博客 504

SecOC专题之新鲜值TripCnt

本系列为一步步拆解新鲜值的分发及管理而撰写文章属于原创,根据自身开发经验及理解撰写,若有错误请指出Trip Counter是新鲜值中变化最慢的一个part,并且自增到最大值时,会从头开始翻转计数。Trip Counter需要收发双方都保存,由于其变化较慢,所以不会经常进行同步该值。这就要求开发过程中保证每次对该值的读写必须要正确。

qq_22969363的博客 1154

贪心+二分解决最大值最小、最小值最大问题

  在刷题时,总会遇到求最大值最小,最小值最大问题,也许它会暗喻是这样的一个问题。对于这样的一个问题,你会发现用dp和枚举都会超时超内存,或者说很麻烦,所以这是一个比较简单的解题方式。 二分逼近思想 •对于难以直接确定解的问题,采取二分枚举+检验的思想. •已知解为x,验证x是否满足要求. •如果答案具有特定的范围,并且验证答案是否成立的函数具有单调性。则可以在范围内对答案进行二分验证,...

sjs_caomei的博客 1万+

【网络安全 | 渗透工具】密码字典生成工具crunch、cupp安装使用教程

Crunch是一个常用的密码破解工具,它可以根据指定的字符集、长度和模式生成各种可能的密码并进行暴力破解。同时,Crunch可以将生成的密码保存到文件中,以便在破解工具中使用。在进行渗透测试时,手动收集密码字典是十分耗时的,利用密码字典生成工具可以大幅缩短时间,提高爆破宽度。

等风来 8422

半车(前后、左右)、整车悬架详细推导建模和simulink仿真分析

用达朗贝尔定理依据悬架数学模型,得到悬架模型微分方程,分别用simulink建立前后半车、左右半车悬架;结合转向2自由度模型与半车侧倾模型,对模型考虑相干性、延时性的C级随机路面下,仿真分析给定角阶跃输入下的侧倾稳定性。

Mr.邹的博客 1万+

UVa 714 Copying Books (最大值尽量小_二分+贪心)

原题: Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and

AK_HuangYC的博客 598

封装POD与PinMap文件总结学习-20250516

芯片封装外形图(POD)和PinMap是芯片设计和制造中的关键文档。POD详细描述了芯片的物理尺寸、引脚布局和封装类型,而PinMap则提供了芯片封装上各个引脚的位置、名称和功能的详细信息。这些文档在芯片设计、制造和应用过程中起到“地图”的作用,帮助设计人员理解芯片的物理和电气特性。在PCB设计中,POD用于确定socket的footprint和pogo的选型,而PinMap则用于器件的合理布局和布线。这些信息对于确保芯片的正确安装和功能至关重要。

歌颂苦难的行为是无耻的; 2369

UVa 714 Copying Books(贪心 二分)

题意  把m数分成k组  使每组数的和的最大值最小  如果有多种分法 靠前的组的和尽量小 关键是找出那个最小的最大值   可以通过二分来找出  开始左端点为m个数中最大的数  右端点为m个数的和  若中点能将m个数分为小于等于k组  比它大的肯定都是可以的  中点变为右端点   否则中点变成左端点 然后就可以贪心逆向模拟了  从后往前每组选择尽量多的数直到剩下的数等于组数  #include

Deng's site \# 1292

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

UVa714 Copying Books(二分答案+贪心)

题目链接 1.题目大意:把一个正整数序列划分成k个非空的连续子序列,使得每个正整数恰好属于一个序列。设第i个序列的各数之和为S(i),现在我们要让所有S(i)的最大值尽量小。而且如果有多个解,S(1)尽量小,在此前提下S(2)尽量小…,按要求输出 2.最大值尽量小显然是需要二分答案。对于当前得到的答案,我们只需贪心的一直向后选择最大的子区间,即这一段相加小于等于当前答案。如果整个序列划分的个数小...

Happig的博客 718

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二分,贪心(Copying Books,uva 714)

最大值尽量小,二分加判断可不可行。这个方法十分重要。 判断方法用贪心。 一些优化: 二分的左边界为最大值,二分的右边界为和。 判断时发现不可行立刻返回。 字典序最小,从右往左贪心即可,因为若右边的多拿了左边的东西,那么左边就有机会拿更左边的东西。 分组不能为空集,所以贪心到后面组不够了,那就直接一人一组。 搞了很久,因为一些算法有问题,所以有死循环没发现。 代码

xl2015190026的博客 394

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

UVA - 714 Copying Books 抄书 贪心+二分

题意: 意思就是给出n本书然后要分成k份,每份总页数的最大值要最小。问你分配方案,如果最小值相同情况下有多种分配方案,输出第一份页数最小的,如果仍有多解,输出第二份最小的,依此类推。 正解:贪心+二分 令存放数据元素的数组是a,因为1 在区间[1,max{a[i]}]进行二分。 对于n个元素组成序列,要划分成k份,使每份页数不超过x, 那么可以从左往右扫描,划分份,

便纵有千种风情 493

UVA - 714 Copying Books (抄书)(二分+贪心)

题意:把一个包含m个正整数的序列划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列(所有的序列不重叠,且每个正整数都要有所属序列)。设第i个序列的各数之和为S(i),你的任务是让所有的S(i)的最大值尽量小。如果有多解,S(1)应尽量小,如果仍有多解,S(2)应尽量小,依此类推。 分析: 1、二分最小值x。 2、判断当前x是否满...

Cherrychan2014的博客 527

UVa 714 Copying Books 二分 + 贪心 (最大值最小化问题)

/** * 最大值最小化问题: 二分法。 刘汝佳那本白书上也说的很详细。 * 先把最大值的可能区间计算出来,也就是[0, maxAns] maxAns 就是所有页数总和。 * 然后再在答案区间里先把“最大值最小化”。 * 得到最小化后的最大值以后,就可以根据这个最大值来对最终答案进行计算。 * 如何分区,也就是计算最后答案ans: 这里就要用到贪心思想,因为题目要求 *

xuruoxin的专栏 4838

[贪心&&二分]uva714 Copying Books

最大值最小化的典型题目 题意:给出m个数字,一个数字k,把这m个数字划分为k个区间使得这k个区间中的所有的数相加的最大值最小,k个区间中的数字必须按照原来的顺序。 思路:典型的最大值最小化,这是刘汝佳的算法竞赛经典入门中的讲解,然后使用贪心从后往前找。

九问的烦恼 1118

UVa 714 Copying Books (二分答案 + 贪心)

最大值最小化问题 我们可以二分查找这个答案,初始化上界 R 为这个序列的和,下界为序列中的最大值。我们二分查找,即取L和R的中间值C,判断k个中序列最大的S(i)是否小于C(这个过程我们只需要将序列尽量往后划分即可),若小于C,则上界R就变为C,否则下界L就变为C+1,重复这个步骤直到L==R即可,这时的L(或R)就是我们要找的。 由于输出的时候需要满足,S(1)尽量小,其次S(2)尽量小……...

super_son的博客 338

uva 714 - Copying Books(贪心 最大值最小化 二分)

题目描述开头一大堆屁话,我还仔细看了半天。。其实就最后2句管用。意思就是给出n本书的页数然后要分成k份,每份的最大值要最小。问你分配方案,如果最小值相同情况下有多种分配方案,输出前面份数小的,就像字典序输出从小到大一样的意思。 这里用到贪心的方法,定义f(x)为真的条件是满足x为最大值使n本书分成k份,那么就是求x的最小值。如何确定这个x就是用的二分法,x一定大于0小于所有值的合,不断的二分再判

glq007的acm的奋斗 1619

UVA 714 Copying Books(二分+贪心)

大体题意: 给你n 个数,要求分成m份,使得m份中的最大值最小,要求打印解,如果多解,要求第一份最小,其次第二份最小,,依次类推。 思路: 最大值最小,肯定是二分了。 我们直接二分最大值,找一个最小的答案x。 然后我们划分n 个数,因为越往前越小,所以肯定从后向前枚举。 然后第i 个数要不要划分的话,有两个依据,当前和超过了x  或者 剩下的可以切的刀数不足 要求的刀数,那么就必须划分

aozil_yang的博客 448

【uva 714】Copying Books(算法效率--二分+贪心)

题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案。 解法:由于是连续的数的“最大值最小”,便可想到二分每段的最大值,若这时可分成<=K段,则这个最大值成立,再继续二分。 输出方案需要用到贪心策略, 先从后往前贪心求得最小划分的段数M,若M不足K,则直接使K-M个数单独划分为一段,保证字典序最小。 1 #include<c...

weixin_33794672的博客 186

uva 714 - Copying Books(二分+贪心)

#include #include #include #include #include #include #include #include #include #include using namespace std; #define maxn 500 + 10 #define INF 2100000000 #define ll long long int a[maxn];

u010652938的专栏 496

为什么不能轻信GPT-5或苹果AI服务等未官宣技术传闻

大型语言模型(LLM)作为当前人工智能的核心载体,其演进路径需依托可验证的架构迭代、训练数据更新与推理优化等硬性技术指标。当公众频繁接触‘GPT-5实测’‘类ChatGPT服务’等表述时,实则面临信息可信度缺失、技术细节真空与落地路径模糊三重风险。这类传闻往往跳过模型压缩、API设计、隐私合规等关键工程环节,缺乏可复现的评测基准与部署方案,难以支撑真实业务集成。在AI工程实践中,优先关注已开源模型(如Qwen2、Llama3)的微调适配、RAG增强与边缘部署,才是保障技术价值落地的理性选择。本文聚焦传闻识别

weixin_30439067的博客 411
上一篇: Hdu-5053 the Sum of Cube(水题)
下一篇: UVA - 10602 Editor Nottoobad
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值