【uva 714】Copying Books(算法效率--二分+贪心)
题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案。
解法:由于是连续的数的“最大值最小”,便可想到二分每段的最大值,若这时可分成<=K段,则这个最大值成立,再继续二分。
输出方案需要用到贪心策略, 先从后往前贪心求得最小划分的段数M,若M不足K,则直接使K-M个数单独划分为一段,保证字典序最小。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 const int N=510,D=(int)1e7+10;//N*D long long
7 typedef long long LL;
8 int a[N],v[N];
9 int n,k;
10
11 int check(LL x)
12 {
13 LL t=1,h=0;
14 for (int i=1;i<=n;i++)
15 {
16 h+=a[i];
17 if (h>x) h=a[i],t++;
18 }
19 return t<=k;
20 }
21 int main()
22 {
23 int T;
24 scanf("%d",&T);
25 while (T--)
26 {
27 long long h=0,mx=0;
28 scanf("%d%d",&n,&k);
29 for (int i=1;i<=n;i++)
30 scanf("%d",&a[i]),h+=a[i],mx=mx>a[i]?mx:a[i];
31 LL l=mx,r=h,mid,ans=1<<30;
32 while (l<=r)
33 {
34 mid=(l+r)>>1;
35 int tmp=check(mid);
36 if (tmp) ans=mid,r=mid-1;
37 else l=mid+1;
38 }
39 int e=1; h=0;
40 for (int i=n;i>=1;i--)
41 {
42 h+=a[i], v[i]=0;
43 if (h>ans) h=a[i],e++,v[i]=1;
44 }
45 h=0;
46 for (int i=1;i<=n;i++)
47 {
48 printf("%d",a[i]);
49 if (v[i]) printf(" /");
50 else if (h<k-e) printf(" /"),h++;
51 if (i<n) printf(" ");
52 }
53 printf("\n");
54 }
55 return 0;
56 }
【uva 714】Copying Books(算法效率--二分+贪心)的更多相关文章
- UVA 714 Copying Books 抄书 (二分)
题意:把一个包含m个正整数的序列划分成k个非空的连续子序列.使得所有连续子序列的序列和Si的最大值尽量小. 二分,每次判断一下当前的值是否满足条件,然后修改区间.注意初始区间的范围,L应该为所有正整数 ...
- uva 714 Copying Books(二分法求最大值最小化)
题目连接:714 - Copying Books 题目大意:将一个个数为n的序列分割成m份,要求这m份中的每份中值(该份中的元素和)最大值最小, 输出切割方式,有多种情况输出使得越前面越小的情况. 解 ...
- UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)
Copying Books Before the invention of book-printing, it was very hard to make a copy of a book. A ...
- UVa 714 Copying Books(二分)
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
- UVA 714 Copying Books 二分
题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...
- uva 714 - Copying Books(贪心 最大值最小化 二分)
题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...
- UVa 714 Copying books 贪心+二分 最大值最小化
题目大意: 要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的.每个抄写员的速度是相 ...
- UVA - 714 Copying Books (抄书)(二分+贪心)
题意:把一个包含m个正整数的序列划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列(所有的序列不重叠,且每个正整数都要有所属序列).设第i个序列的 ...
- UVa 714 Copying Books - 二分答案
求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * T ...
随机推荐
- NodeJS各个平台安装详细
http://www.runoob.com/nodejs/nodejs-install-setup.html 记录
- 【Java基础】面向对象上
面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...
- 【Flutter】容器类组件之剪裁
前言 Flutter中提供了一些剪裁函数,用于对组件进行剪裁. 剪裁Widget 作用 ClipOval 子组件为正方形时剪裁为内贴圆形,为矩形时,剪裁为内贴椭圆 ClipRRect 将子组件剪裁为圆 ...
- 【MySQL】MySQL知识图谱
MySQL 文章目录 MySQL 表 锁 索引 连接管理 事务 日志系统 简单记录 极客时间 - MySQL实战45讲 MySQL知识图谱 表 表 引擎选择 编码问题 表空间管理 字段设计 备份和恢复 ...
- 【Oracle】dump函数用法
Oracle dump函数的用法 一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全 ...
- library cache pin解决方法
library cache pin大部分都是因为编译存储过程造成的 查找造成问题的数据库对象(一般为存储过程) SELECT * FROM v$session_wait WHERE event = ' ...
- RocketMQ在linx安装及其有关问题解决
Linx安装和使用: rocketmq官网:http://rocketmq.apache.org/ 首先安装JDK(推荐使用JDK1.8),并配置环境变量 下载rocketmq压碎包并解压到指定目录 ...
- salesforce零基础学习(一百)Mobile Device Tracking
本篇参考: Mobile Device Tracking (salesforce.com) UserDevice | SOAP API Developer Guide | Salesforce Dev ...
- 转 11 jmeter之图形监控扩展
11 jmeter之图形监控扩展 Jmeter默认监听器的缺陷 Jmeter默认的监听器在表格.文字方面比较健全,但是在图形监控方面比较逊色,尤其在监控Windows或Linux的系统资源方面.但 ...
- 前端面试之HTML5的新变化
前端面试之HTML5的新变化 H5新增语义化标签 头部标签 <header> :头部标签 <nav> :导航标签 <article> :内容标签 <secti ...