poj1505

题意:给出一个数列有n个数,要求用分割分把这个数列分成m段,不能改变原数列的顺序。每段至少一个数。求使得加和最大的那段的加和最小的划分方案。如果有多组解的话先要保证第一段和尽量小,若仍有多组解,要先保证第二段和尽量小,以此类推。

分析:二分+贪心。二分查找这个加和最大的段的加和最小值。在查找过程中,每次枚举这个加和,对数列从左到右看一遍,看在每段加和不超过这个枚举值的前提下最少可以将这个数列分成几段。如果分段数小于等于m则这个枚举值偏大或者刚刚好,如果大于m则说明枚举值偏小。

找到了这个值之后,我们开始求最优方案,我的做法是先保证最右面那段加和尽量大,其次右数第二段加和尽量大,以此类推。虽然与题中的左面最小的方案不同,但是最终结果是一样的,因为符合题目要求的那组解一定是左面最小,最终一定会导致右面最大。对于这种右面最大的方式,只需要从右到左将数列走一遍即可。注意处理保证右边最大之后划分的段数不足m的情况,要做相应调整以满足每段至少一个数的要求。即将依次左面没有分隔符的空位画上分隔符。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <numeric>
#include <algorithm>
using namespace std;#define MAX_BOOK_NUM 505int book_num, scriber_num;
long long book[MAX_BOOK_NUM];
bool cut_before[MAX_BOOK_NUM];void input()
{scanf("%d%d", &book_num, &scriber_num);for (int i = 0; i < book_num; i++)scanf("%lld", &book[i]);
}bool ok(long long a)
{long long temp = 0;int cnt = 1;for (int i = 0; i < book_num; i++){if (temp + book[i] <= a){temp += book[i];continue;}temp = book[i];cnt++;if (cnt > scriber_num)return false;}return cnt <= scriber_num;
}long long binary_search()
{long long l = *max_element(book, book + book_num);long long r = accumulate(book, book + book_num, 0);while (l < r){long long mid = (l + r) / 2;if (ok(mid))r = mid;elsel = mid + 1;}return l;
}void work()
{long long each = binary_search();memset(cut_before, 0, sizeof(cut_before));long long temp = 0;int cnt = 0;for (int i = book_num - 1; i >= 0; i--){if (temp + book[i] <= each){temp += book[i];continue;}cut_before[i + 1] = true;temp = book[i];cnt++;}int i = 0;while (cnt < scriber_num - 1){i++;if (!cut_before[i]){cut_before[i] = true;cnt++;}}
}void output()
{printf("%lld", book[0]);for (int i = 1; i < book_num; i++){if (cut_before[i])printf(" /");printf(" %lld", book[i]);}putchar('\n');
}int main()
{int t;scanf("%d", &t);while (t--){input();work();output();}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/rainydays/archive/2013/06/12/3132717.html

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

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

相关文章

mysql出现连接错误不识别 utf8mb4

2019独角兽企业重金招聘Python工程师标准>>> 出现这样的错误&#xff0c;指的是不识别该字符集。 可能是 数据库 里面配置 或者是 连接属性 配置了该字符集那么修改回来即可。 还有一种情况就是 &#xff0c;java-connert-sql连接包&#xff0c;版本太低了。比如 低…

Android之录音--AudioRecord、MediaRecorder

Android提供了两个API用于实现录音功能&#xff1a;android.media.AudioRecord、android.media.MediaRecorder。 网上有很多谈论这两个类的资料。现在大致总结下&#xff1a; 1、AudioRecord 主要是实现边录边播&#xff08;AudioRecordAudioTrack&#xff09;以及对音频的实时…

JSFL 获取当前脚本路径,执行其他脚本

Application.jsfl为程序入口&#xff0c;导入其他jsfl 【Common.jsfl】function trace() {fl.trace(Array.prototype.join.call(arguments, " ")); } 【Application.jsfl】var JSFL_PATH fl.scriptURI.substr(0,fl.scriptURI.lastIndexOf("/")1); var inc…

一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

前言之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介GitHub开源地址:l2999019/GZY.Quartz.MUI: 基于Quartz的轻量级,注入化的UI组件 总而言之,这个组件主要想做的就是:像swaggerUI一样,项目入侵量小,仅需要在Startup中注…

越绿自己,就会越强?

1 我们要求不高的&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 小区的猫竟然通过监控抓老鼠&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 不同职业的相亲对象&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 别人家的年终奖&#xff0c…

oracle死锁解决常用方法(屡试不爽)

--1.查询被锁的情况 select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where l.object_id  o.object_id and l.session_ids.sid; --2.用下面语句kill掉死锁的进程 alter system kill session 24,111; --(其中24,111分别是上面…

Lync Server 2010迁移至Lync Server 2013部署系列 Part18:开启Lync 2013 Mobility

当我们将内部Lync 功能开通后&#xff0c;我们除了需要发布边缘开启外部登录功能外&#xff0c;我们还需要向用户提供Lync 手机登录功能&#xff0c;那么在今天的博文中我们就介绍一下关于如何开启Lync Mobility功能&#xff0c;就Lync 2013来讲&#xff0c;我个人认为开启Mobi…

使用springfox 集成swagger 与spring mvc

2019独角兽企业重金招聘Python工程师标准>>> 创建一个maven 模块 将springfox相关的配置都配置在一个单独的api模块中&#xff0c;可以把这个模块当成web应用跑起来。 <pluginRepositories> <pluginRepository> <id>jcenter-snapshots</id>…

Android之 AudioTrack学习

AudioTrack主要是用来播放声音的&#xff0c;AudioTrack贯穿了JAVA层,JNI层和Native层。 AudioTrack JAVA层&#xff1a; framework\base\media\java\android\media\AudioTrack.java 以AudioTrack的使用方法举例&#xff1a;pp] // 得到一个满足最小要求的缓冲区的大小 int b…

技术分享 | CodeReview主要Review什么?

源宝导读&#xff1a;Code Review, 意即代码审查,是指一种有意识和系统的召集其他程序员来检查彼此的代码是否有错误的地方. 在敏捷团队中推行CodeReview, 可以帮助团队快速成长.本文将分享在"天际-建模平台"如何推行&实践CodeReview。一、为什么要 Code Review?…

Oracle中的USEREVN()

1.USEREVN() 返回当前用户环境的信息,opt可以是: ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE 1.ISDBA 查看当前用户是否是DBA如果是则返回true SQL> select userenv(isdba) from dual; USEREN ------ FALSE 2.SESSION 返回会话标志 SQL>…

你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........

全世界只有3.14 % 的人关注了爆炸吧知识男人的快乐就是这么朴实无华为什么蚊子不会被雨滴砸死&#xff1f;这个发在知乎上会被质疑患有十年脑血栓的问题&#xff0c;获得了2015年的中国搞笑诺贝尔奖——菠萝科学奖。获奖者结束获奖感言的方式也很搞笑&#xff1a;这个直接在“诺…

SQL优化总结

SQL 的优化主要涉及几个方面&#xff1a; &#xff08;1&#xff09; 相关的统计信息缺失或者不准确 &#xff08;2&#xff09; 索引问题 &#xff08;3&#xff09; SQL 的本身的效率问题&#xff0c;比如使用绑定变量&#xff0c;批量DML 采用bulk等&#xff0c;这…

php curl用法

2019独角兽企业重金招聘Python工程师标准>>> curl 是使用URL语法的传送文件工具&#xff0c;支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传&#xff0c;kerberos、基于HTT格式的上传、代理、…

Ubuntu之12.04常用快捷键——记住这些你就是高手啦!

桌面 ALT F1: 聚焦到桌面左侧任务导航栏&#xff0c;可按上下键导航。 ALT F2: 运行命令 ALT F4: 关闭窗口 ALT TAB: 切换程序窗口 ALT 空格: 打开窗口菜单 PRINT: 桌面截图 SUPER: 打开Dash面板&#xff0c;可搜索或浏览项目&#xff0c;默认有个搜索框&#xff0c;按“…

Zabbix RCE with API JSON-RPC

测试脚本: #!/usr/bin/env python # -*- coding: utf-8 -*- # Software Link: http://www.zabbix.com/download.php # Version: 2.2 - 3.0.3import requests import json import sysdef verify(url,hostid):url url /api_jsonrpc.php ### Dont editlogin Admin ##…

类的进阶

apply的两个参数分别是上下文和参数组成的数组。 function.apply(this, [1, 2, 3]); call的两个参数是多个&#xff0c;也就是不用数组包裹参数。 function.call(this, 1, 2, 3); 常常会遇到事件内部没有this的情况&#xff0c;怎么处理呢&#xff1f; 低级方法&#xff1a; $(…

探索 dotnet core 为何在 Windows7 系统需要补丁的原因

在一些 Windows 7 系统上&#xff0c;根据 dotnet 官方文档&#xff0c;需要安装上 KB2533623 补丁&#xff0c;才能运行 dotnet core 或 .NET 5 等应用。尽管非所有的设备都需要安装此&#xff0c;但这也让应用的分发不便&#xff0c;安装包上都需要带上补丁给用户安装。此补丁…

oracle 性能优化--索引总结

索引是建立在表的一列或多个列上的辅助对象&#xff0c;目的是加快访问表中的数据&#xff1b; Oracle存储索引的数据结构是B*树&#xff0c;位图索引也是如此&#xff0c;只不过是叶子节点不同B*数索引&#xff1b; 索引由根节点、分支节点和叶子节点组成&#xff0c;上级索引…