题目连接:714 - Copying Books

题目大意:将一个个数为n的序列分割成m份,要求这m份中的每份中值(该份中的元素和)最大值最小, 输出切割方式,有多种情况输出使得越前面越小的情况。

解题思路:二分法求解f(x), f(x) < 0 说明不能满足, f(x) >= 0说明可以满足,f(x) 就是当前最大值为x的情况最少需要划分多少份-要求份数(如果f(x ) >= 0 说明符合要求而且还过于满足,即x还可以更小)。

注意用long long .

#include <stdio.h>
#include <string.h>
int max(const int &a, const int &b) { return a > b ? a : b;}const int N = 1005;
int n, T;
long long num[N], sum[N], rec[N];bool judge(int Max) {int cnt = 0, first = 0, end = 1;while (end <= n) {if (sum[end] - sum[first] > Max) {cnt++;first = end - 1;}end++;}return cnt <= T - 1;
}int main () {long long  cas, lift, right, cur;scanf("%lld", &cas);while (cas--) {// Init;memset(num, 0, sizeof(num));memset(sum, 0, sizeof(sum));memset(rec, 0, sizeof(rec));lift = right = 0;// Read.scanf("%d%d", &n, &T);for (int i = 1; i <= n; i++) {scanf("%lld", &num[i]);sum[i] = sum[i - 1] + num[i];lift = max(lift, num[i]);}right = sum[n];// Count;while (lift != right) {cur = (right + lift) / 2;if (judge(cur)) {right = cur;}elselift = cur + 1;}// Draw;long long now = 0, cnt = 0;for (int i = n; i > 0; i--) {if (now + num[i] > lift || i < T - cnt) {rec[i] = 1;cnt++;now = num[i];}elsenow += num[i];}// Printf;for (int i = 1; i < n; i++) {printf("%lld ", num[i]);if (rec[i])        printf("/ ");}printf("%lld\n", num[n]);}return 0;
}

uva 714 Copying Books(二分法求最大值最小化)相关推荐

  1. uva 714——Copying Books

    题意:把一个m个整数的序列划分成k个连续非空的子序列,使得子序列和的最大值最小. 思路:二分.遇到最大值最小大多都二分了,让划分的子序列都不超过x,根据x来judge最终结果k个是多还是少,然后二分来 ...

  2. uva 714 Copying Books

    Thinking about it: 看完这题的时候,确实没有啥思路,看了题解才明白的.这个最小值是通过二分法先确定下来的,然后才能分组.这种思维方式超出了我的意料,我还一直朝着DP的思路走.看来我还 ...

  3. 蓝桥试题 算法提高 打包(二分法,最大值最小化)

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 Lazy有N个礼物需要打成M个包裹,邮寄给M个人,这些礼物虽然很便宜,但是很重.Lazy希望每个人得到的礼物的编号都是连续的.为了 ...

  4. Monthly Expense POJ - 3273(二分最大值最小化)

    Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...

  5. leetcode 二分法 最大值最小化/最小值最大化

    一.(leetcode 410)分割数组的最大值 题目描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 代 ...

  6. 【算法 | 实验8】分配最小页数(数组划分和最大值最小化问题)

    文章目录 题目 问题分析与算法设计思路 思路1:类似枚举的分治(暴力) 思路2:二分法 算法实现(C++) 思路1实现 思路2实现 bug记录 1.子问题对最大值没有实现最小化 2.保存的最大值是局部 ...

  7. 最大值最小化(网易有道2013年校园招聘面试一面试题)

    题目描述: 在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要. 当时都是通过招募抄写员来进行书本的录入和复制工作的, 假设现在要抄写m ...

  8. 摘枇杷(最大值最小化)

    理工学院的枇杷快熟了,ok,大家都懂得.而且大家都知道,学校的枇杷树都是一列一列的.现在小Y同学已经在筹划怎么摘枇杷了.现在我们假设有一列枇杷树,而且每棵枇杷树上枇杷果的数量小Y都已经知道了. 假设现 ...

  9. uva714 Copying Books

    题意:给你n个数,你只能刚好分成k各部分,并要求某个部分之和最大值最小化.典型二分的题目.但是这题我还是被一个小地方卡了很久.二分下届l应该取n个数里最大的数,这个很好想,但是我每次取得都很随意,直接 ...

最新文章

  1. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】
  2. TiDB 在量化派风控系统中的应用
  3. 吴恩达 coursera AI 专项五第三课(上)总结+作业答案
  4. [HAOI2007]上升序列
  5. sql where子查询5中字句的使用顺序
  6. 【算法竞赛学习】心跳信号分类预测-数据分析
  7. 二叉树节点数目计算的两种思路
  8. C++面试宝典之STL向量容器
  9. 为 Notepad++ 安装 NppFTP 插件,查看修改虚拟机上的文本文件
  10. 通过一个实例掌握测试工具JMeter的一些基本概念
  11. linux下安装fortran90教程,linux 安装fortran 90
  12. Rational Rose下载安装教程
  13. mysql节点是什么意思_数据库节点是什么意思
  14. SQL注入入侵动网站(MSSQL)
  15. Spring IOC/DI和AOP
  16. 网络精英赛模拟练习(3)
  17. 利用Django框架简单设计一个登陆页面
  18. 端午节将至,吃粽子有讲究哦
  19. asm cli/sti 指令
  20. 五大抉择影响女人一生幸福

热门文章

  1. 世界历史上10位征服过最广大土地的人
  2. Android编译源码hook,Hook Android C代码(Cydia Substrate)
  3. 21考研 为啥看了那么多经验贴,还是搞不定考研?
  4. MySQL基础学习③数据库准备工作,导入官方employees数据库
  5. 【持续更新】JavaScript常见面试题整理
  6. [黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习
  7. (图)不可错过的好看好玩的射箭体感游戏
  8. win10如何开放端口
  9. 微信分享(JS-SDK权限签名算法)-Java实现
  10. 联合国维和女战士,巾帼不让须眉 | 经济学人全球早报精选