1028. 复制书稿

题意

现在要把 m m m 本有顺序的书分给 k k k 个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三和第四本书给同一个人抄写。

现在请你设计一种方案,使得复制时间最短。

复制时间为抄写页数最多的人用去的时间。

思路

因为是求 k k k 个人中用时最大的最小值 可以想到用二分来解决

m i d mid mid 为假设的分组后用时最多的那个人消耗的时间

所以把原数组分成区间和小于等于 m i d mid mid 的 c n t cnt cnt 段

如果 c n t > k cnt > k cnt>k 说明 m i d mid mid 选小了

否则表示 m i d mid mid 选大了 或者 m i d mid mid 正好是解

求出最大值应该是多少之后 再 c h e c k check check 一边后就得到了符合题意的分组方式

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 998244353
#define endl '\n'using namespace std;
typedef long long LL;
typedef pair<int, int>PII;
const int N = 600;int m, k;
int a[N];
int L[N], R[N];bool check(int x) {int sum = 0;int cnt = 1;R[cnt] = m;for (int i = m; i >= 1; --i) {if (sum + a[i] <= x)sum += a[i];else {L[cnt] = i + 1;R[++cnt] = i;sum = a[i];}}L[cnt] = 1;return cnt <= k;
}void solve() {cin >> m >> k;for (int i = 1; i <= m; ++i) {scanf("%d", &a[i]);}int l = 1, r = 1e9;while (l < r) {int mid = l + r >> 1;if (check(mid))r = mid;else l = mid + 1;}check(l);for (int i = k; i >= 1; --i) {printf("%d %d\n", L[i], R[i]);}}int main() {solve();return 0;
}

AcWing 1028. 复制书稿 (二分)相关推荐

  1. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  2. 第九章 动态规划-1278:【例9.22】复制书稿(book)

    1278:[例9.22]复制书稿(book) 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允 ...

  3. P1264 复制书稿

    P1264 复制书稿 2017年8月4日 DP+贪心 #include<iostream> #include<cstdio> #include<algorithm> ...

  4. BMH online judge刷题记——书的复制(二分)

    书的复制 题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个 ...

  5. 复制书稿(信息学奥赛一本通-T1278)

    [题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三和第四本书给同一个人抄写 ...

  6. 1278:【例9.22】复制书稿(book)

    时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分 ...

  7. 信息学奥赛一本通1278:复制书稿(evd)

    [题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三和第四本书给同一个人抄写 ...

  8. CODEVS 3162 抄书问题 (复制书稿)

    做这个题,犯了致命错误,wa了几发. 首先要dp,然后必须贪心输出结果,我这个错误以前犯过一次. 输出结果的时候局部最优不一定是全局最优, 因为输出的顺序是倒着来的,而且题目要求是让连续区间中的最大值 ...

  9. 抄书问题2 (复制书稿) 单调性优化dp + 序列划分模型

    3163 抄书问题 2  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写 ...

最新文章

  1. 【微信小程序之画布】终:手指触摸画板实现
  2. 用神经网络分类一维矩阵
  3. 研究生报考苏州大学计算机科学与技术,【图片】18年苏州大学计算机872考研经验分享【苏州大学研究生吧】_百度贴吧...
  4. mysql drop库_Mysql 删除数据库drop database详细介绍
  5. Yammer从Scala转向Java
  6. IdentityServer4密码模式
  7. 命名对象实体对象_我的对象命名
  8. 前端学习(1563):ng-if
  9. 开源http协议库curl和wget的区别和使用
  10. elasticsearch docker无法挂载_ElasticSearch数据备份与恢复
  11. AD域安装及必要设置
  12. Android APK反编译详解(转)
  13. 请求发送者与接收者解耦——命令模式(四)
  14. 分享一个强大的4K/8K超高清视频下载器
  15. 推荐3个计算机专业的英文电子书下载网站
  16. 新鲜的蔬菜和水果中富含抗氧化物,可以有效延缓衰老和疾病
  17. docker对已经启动的容器添加目录映射(挂载目录)
  18. 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7(或ndkr7b)+COCOS2DX(没有用到cygwin和minigw)
  19. Android开发之数据库更新失败原因分析
  20. 关于input文本框只能输入数字的几种实用方法!!!

热门文章

  1. 信创云“华山论剑” 五强鼎力谁与争锋?
  2. PYTHON 画一支圆珠笔
  3. Greenplum安装手册
  4. 三字棋Java程序设计_六子棋Java程序设计.docx
  5. jenkins创建流水线,基于gitlab与Jenkinsfile
  6. 编写简单的在线考试系统
  7. WeBug3.0靶场环境搭建与搭建资源分享
  8. 测量学—数字测图原理与方法
  9. C语言sfr定义一个变量,单片机c语言的sbit和sfr
  10. 哪些开源协议可以商用