AcWing 1028. 复制书稿 (二分)

简介: 笔记

1028. 复制书稿


题意

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


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


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


思路

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


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


所以把原数组分成区间和小于等于mid 的cnt 段


如果cnt>k 说明 mid 选小了


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


求出最大值应该是多少之后 再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;
}


目录
相关文章
|
5月前
|
物联网
【洛谷 P1464】Function 题解(递归+记忆化搜索)
该题目定义了一个递归函数$w(a,b,c)$,具有特定的终止条件和递归规则。当$a, b, c$任一值小于等于0或大于20时,函数有特殊返回值。否则,根据$a, b, c$的相对大小关系应用不同的递归计算。给定输入是一系列的三元组$(a, b, c)$,以$-1,-1,-1$结束。程序使用记忆化搜索优化递归调用,避免重复计算。样例输入输出展示了如何计算$w(1, 1, 1)$和$w(2, 2, 2)$。
41 0
|
算法 C语言 C++
【动态规划】不同路径,编辑距离题解及代码实现
两题由简单到难得DP问题!助我们拿下DP!
60 0
(树状数组,线段树)(数组模拟哈希)(解题步骤)acwing数星星
(树状数组,线段树)(数组模拟哈希)(解题步骤)acwing数星星
94 0
|
机器学习/深度学习 算法 C++
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(蓝桥杯)递推与递归,前缀和,二分经典例题分析
(蓝桥杯)递推与递归,前缀和,二分经典例题分析
(蓝桥杯)递推与递归,前缀和,二分经典例题分析
递归题目练习---数独问题
递归题目练习---数独问题
110 0
递归题目练习---数独问题
|
机器学习/深度学习 算法
【递归与递推 4】AcWing95. 费解的开关 、AcWing 93. 递归实现组合型枚举、AcWing 1209. 带分数、AcWing 1208. 翻硬币
【递归与递推 4】AcWing95. 费解的开关 、AcWing 93. 递归实现组合型枚举、AcWing 1209. 带分数、AcWing 1208. 翻硬币
155 0
|
算法
【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)
【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)
80 0
【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)
|
算法 机器人 定位技术
【牛客刷题-算法】NC34 不同路径的数目(一) | 动态规划、组合数解法
【牛客刷题-算法】NC34 不同路径的数目(一) | 动态规划、组合数解法
115 0
【牛客刷题-算法】NC34 不同路径的数目(一) | 动态规划、组合数解法
|
算法
递归题目练习---爬楼梯
递归题目练习---爬楼梯
102 0