传送门:Zoj2002

题目大意:从左到右把一排数字k分,得到最小化最大份,如果有多组解,左边的尽量小。

思路:贪心+二分(参考青蛙过河)。

方向:从右向左。

注意:有可能最小化时不够k分。如

                                    3 3
                           1 2 3
  k分得到最小化的最大值是3,分组却只能分两个组。
   错误结果是 1 2 / 3.正确结果是1 / 2 / 3
  因此要从左到右补齐‘/’


#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<memory.h>
using namespace std;
int n,k;
int a[510];
int b[510];
int used;
void _update()
{
memset(b,0,sizeof(b));//开始把0写成false了。。。。尴尬
memset(a,0,sizeof(a));
}
bool _judge(long long v)
{
long long temp;
used=0;
int i=n;
while(i>=1)
{
temp=0;
used++;
while(temp+a[i]<=v){
temp+=a[i];
i--;
if(i<1) break;
}
}
if(used<=k) return true;
return false;
}
void _Cout(long long v)
{
long long temp;
int i=n;
used=0;
while(i>=1)
{
temp=0;
used++;
while(temp+a[i]<=v){
temp+=a[i];
i--;
}
b[i]=1;
}
for(i=1;i<n;i++)
{
cout<<a[i]<<" ";
if(b[i]) cout<<"/ ";
else if(used<k) { // 补齐
cout<<"/ ";
used++;
}
}
cout<<a[n]<<endl;
} int main()
{ int i,T;
cin>>T;
while(T--)
{
_update();
cin>>n>>k;
long long Max=0,M=0;
for(i=1;i<=n;i++) {
cin>>a[i];
M+=a[i];
if(a[i]>Max) Max=a[i];
}
long long L=Max,R=M,mid;
while(L<R){
mid=(L+R)/2;
if(_judge(mid)) R=mid;
else L=mid+1;
}
_Cout(R);
}
return 0;
}






ZOJ 2002 Copying Books 二分 贪心的更多相关文章

  1. UVA 714 Copying Books 二分

    题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...

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

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...

  3. 714 - Copying Books——[贪心、二分查找]

    Before the invention of book-printing, it was very hard to make a copy of a book. All the contents h ...

  4. UVa 714 Copying Books - 二分答案

    求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * T ...

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

      Copying Books  Before the invention of book-printing, it was very hard to make a copy of a book. A ...

  6. UVa 714 Copying Books(二分)

    题目链接: 传送门 Copying Books Time Limit: 3000MS     Memory Limit: 32768 KB Description Before the inventi ...

  7. Copying Books

    Copying Books 给出一个长度为m的序列\(\{a_i\}\),将其划分成k个区间,求区间和的最大值的最小值对应的方案,多种方案,则按从左到右的区间长度尽可能小(也就是从左到右区间长度构成的 ...

  8. 抄书 Copying Books UVa 714

    Copying  Books 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/B 题目: Descri ...

  9. Codeforces Gym 100231B Intervals 线段树+二分+贪心

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...

随机推荐

  1. java 实现微博,QQ联合登录

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt313 开发平台 http://connect.qq.com/  http:/ ...

  2. Ljava.lang.Object;@ba8a1dc

    因为你从数据库读出数据后,存入到list集合上时,如果你没有指定要存入的数据的类型,系统会自动给你赋一个object类型,他是所以类的鼻祖,你取出数据要进行转型,转化成你自己想要的数据类型才能显示.它 ...

  3. 转深入Java虚拟机 之四:类加载机制

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581 类加载过程     类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个 ...

  4. ServletRequest的一些知识点

    浏览器向服务器的请求(浏览器将数据发送给服务器时,数据存放的地方) 请求方式:GET和POST * GET:发送的数据,追加在请求的URL之上 * POST:发送的数据在HTTP请求体中 浏览器发送数 ...

  5. 九度OJ 1017 还是畅通工程

    #include <iostream> #include <string.h> #include <sstream> #include <math.h> ...

  6. 九度OJ 1016 火星A + B 未AC版,整型存储不下

    #include <iostream> #include <string.h> #include <sstream> #include <math.h> ...

  7. 个人作业2——必应词典APP分析

    第一部分:调研.评测 1.刚刚打开必应词典的时候,它给我的第一反应就是界面美观,最上面是一个查询框,下面有一些经典的句子.单词以及一些精选的文章,所有的功能都可以一目了然,看一眼就知道要怎么去使用,这 ...

  8. 团队作业8——第二次项目冲刺(Beta阶段)第三天

    BETA阶段冲刺第三天 1.当天站立式会议 2.每个人的工作 (1)昨天已完成的工作: 编写页面讨论 (2)今天计划完成的工作: 完成编写页面 (3)工作中遇到的困难: 验证码正确度 (4)每个人的贡 ...

  9. 蓝桥杯PREV-11:横向打印二叉树

    嗯,没错我还报了蓝桥杯. 这是题目 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树时,则把该节点放 ...

  10. 201521123096《Java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 (1)代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过 ...