UVA714- Copying Books(最大最小化)
意甲冠军:k手稿的部分成m部分,使每一个和最小
思路:典型最大值最小化问题,使用贪心+二分。
贪心的是每次尽量将元素往右边划分,二分查找最小的x满足m个连续的子序列和S(i)都不超过x。
由于输出的原因。在划分时就从后往前尽量划分。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef long long ll;
const int MAXN = 1005; int m, k, t;
int arr[MAXN], vis[MAXN];
ll ans, sum, Min; int judge(ll x) {
memset(vis, 0, sizeof(vis));
ll s = 0;
t = 0;
int flag = 1;
for (int i = m - 1; i >= 0; i--) {
if (arr[i] > x) {
flag = 0;
break;
}
if (s + arr[i] > x) {
vis[i] = 1;
t++;
s = arr[i];
if (t > k - 1) {
flag = 0;
break;
}
}
else
s += arr[i];
}
return flag;
} int binary() {
ll x = Min, y = sum;
while (x < y) {
ll mid = x + (y - x) / 2;
if (judge(mid))
y = mid;
else
x = mid + 1;
}
return x;
} void outPut() {
judge(ans);
int num = k - 1 - t;
for (int i = 0; i < m; i++) {
if (vis[i] == 0 && num) {
vis[i] = 1;
num--;
}
}
for (int i = 0; i < m - 1; i++) {
printf("%d ", arr[i]);
if (vis[i])
printf("/ ");
}
printf("%d\n", arr[m - 1]);
} int main() {
int cas;
scanf("%d", &cas);
while (cas--) {
scanf("%d %d", &m, &k);
ans = 0;
Min = arr[0];
for (int i = 0; i < m; i++) {
scanf("%d", &arr[i]);
sum += arr[i];
if (Min < arr[i])
Min = arr[i];
} ans = binary();
outPut();
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
UVA714- Copying Books(最大最小化)的更多相关文章
- UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)
Copying Books Before the invention of book-printing, it was very hard to make a copy of a book. A ...
- POJ1505&&UVa714 Copying Books(DP)
Copying Books Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 7109 Accepted: 2221 Descrip ...
- uva 714 Copying Books(二分法求最大值最小化)
题目连接:714 - Copying Books 题目大意:将一个个数为n的序列分割成m份,要求这m份中的每份中值(该份中的元素和)最大值最小, 输出切割方式,有多种情况输出使得越前面越小的情况. 解 ...
- UVa 714 Copying books 贪心+二分 最大值最小化
题目大意: 要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的.每个抄写员的速度是相 ...
- 「个人训练」Copying Books(UVa714)
好久不更新主要是怠惰了....还要加强训练. 题意分析与思路 注意到这样一句话: our goal is to minimize the maximum number of pages assigne ...
- UVa 714 Copying Books(二分)
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
- 抄书 Copying Books UVa 714
Copying Books 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/B 题目: Descri ...
- UVA 714 Copying Books 二分
题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...
- poj 1505 Copying Books
http://poj.org/problem?id=1505 Copying Books Time Limit: 3000MS Memory Limit: 10000K Total Submiss ...
随机推荐
- cocos2d-x物业现场
pushScene()和popScene()用法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTYyNjY3MTc=/font/5a6L5L2 ...
- hdu3709(数位dp)
求区间[l,r]内有多少个数的满足: 选一个位为中点,是的左边的数到该位的距离等于右边的位到该位的距离. 比如4139 选择3位中点, 那么左边的距离是 4 * 2 + 1 * 1 , 右边的距 ...
- Webservice-初级实例(二)
去年这个时候在亿阳工作,经理让我做数据同步功能,用到WS,于是草草研究之后,就投入使用了.前两天同事给我讲解分配给我的项目时,讲到其中一块是数据同步功能,我不禁一笑,同事问笑什么,我说世界真是奇妙,去 ...
- c#为了实现自己的线程池功能(一)
线程池的技术背景 在面向对象编程中,创建和销毁对象是非常费时间的,由于创建一个对象要获取内存资源或者其他很多其他资源,所以提高服务程序效率的一个手段就是尽可能降低创建和销毁对象的次数.特别是一些非常耗 ...
- Java 执行四则运算
四种基本的操作原理是将被转换成后缀缀表达式表达.然后计算. 转换思路和原则.可以参考将中缀表达式转化为后缀表达式 import java.math.BigDecimal; import java.ut ...
- 将ACCESS数据库迁移到SQLSERVER数据库
原文:将ACCESS数据库迁移到SQLSERVER数据库 将ACCESS数据库迁移到SQLSERVER数据库 ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 ...
- String,StringBuffer和StringBuilder的异同
String,StringBuffer和StringBuilder的异同 ...
- 【LeetCode】【Python解决问题的方法】Best Time to Buy and Sell Stock II
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 【原创】leetCodeOj ---Remove Duplicates from Sorted List II 解题报告
明日深圳行,心情紧张,写博文压压惊 囧 ------------------------------------- 原题地址: https://oj.leetcode.com/problems/rem ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (五)
第四部分请点这里 本文将实现DrawBoard. 如前文所述,Obstacle类和Bing类仅仅提供给DrawBoard必要的信息,如何绘制则完全委托给了DrawBoard,也就是说游戏关键类的细节和 ...