洛谷P1281 书的复制 题解

本题做法

  • 贪心策略+二分答案。

思路

贪心策略:让越往前的同学抄的书尽可能少,后面的尽可能多。

使用二分答案法,详细讲解\(check\)函数的写法。

\(check\)函数

传入一个参数\(x\),代表当前二分出的预定最短复制时间。从第\(m\)本书到第1本书反向遍历,若当前同学再抄第\(i\)本书后超出\(x\),则更换下一个同学抄书。最后记得特判一个最后的同学是否能够在\(x\)时间内抄完书。


代码

#include <bits/stdc++.h>
#define endl '\n'
#define ll long longusing namespace std;const int INF = 0x3f3f3f3f;
const double EPS = 1e-8;
const int N = 505;int m, k, s, p[N], r[N][2], ans;bool check(int x) {int now = k, cnt = 0;for (int i = m; i >= 1; i--) {cnt += p[i];if (cnt > x) {cnt = p[i];now--;}if (now <= 0)return 0;}if (cnt > x)return 0;return 1;
}void print() {int now = k, cnt = 0, beg = m;for (int i = m; i >= 1; i--) {cnt += p[i];if (cnt > ans) {cnt = p[i];r[now][1] = i + 1;r[now][2] = beg;beg = i;now--;}}r[1][1] = 1;r[1][2] = beg;for (int i = 1; i <= k; i++)cout << r[i][1] << " " << r[i][2] << endl;
}int main() {cin >> m >> k;for (int i = 1; i <= m; i++) {cin >> p[i];s += p[i];}int l = 0, r = s + 1;while (l + 1 < r) {int mid = (l + r) >> 1;if (check(mid)) {r = ans = mid;} elsel = mid;}print();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891719.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025/2/22课堂记录

dp,树上依赖背包,树上dp,多叉树转二叉树,愚蠢的矿工,宝藏,状压,猛兽军团,国王目录愚蠢的矿工 国王(猛兽军团)愚蠢的矿工这网页稍微有点乱,不过凑合凑合还能看,就是没法提交了而已 首先看到的第一眼,感觉是树上依赖背包 毕竟要挖到某一个节点的宝藏要之前知道根节点…

【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作

问题描述 在使用Azure上的存储服务 Storage Account 的时候,有时需要代替 它原本提供的域名进行访问,比如默认的域名为:mystorageaccount.blob.core.chinacloudapi.cn, 想转变为 myservice.file.com 。如果使用App Service作为反向代理,我们现在有如下三个疑问: 第一:如…

大胆点!你猜DeepSeek的利润率有多高?

这种一周真是热闹啊,DeepSeek开源周,连续五天(2025年2月24日至28日)开源了5个核心技术项目,覆盖AI模型训练、推理优化、文件系统等多个领域,在今天还放出来了One more thing,直接把自己的利润率放出来了(真不拿用户当外人,哈哈) 接下来让我们一起来看看开源周都带来了…

通过网盘分享的文件:Oracle Database 12c linux版本 安装包

https://pan.baidu.com/s/14n1el1C0v1kbaHpDkw9i6w?pwd=1234 提取码: 1234

CountDownLatch的countDown()方法的底层源码

一、CountDownLatch的构造方法// 创建倒数闩,设置倒数的总数State的值CountDownLatch doneSignal = new CountDownLatch(N);二、countDown() 方法的作用 countDown() 方法的主要作用是将 CountDownLatch 的内部计数器减一。如果计数器减到零,则会唤醒所有等待的线程 三、coun…

论文+1

1.2 研究目标本研究旨在解决微服务架构中质量属性冲突和评估方法缺失的问题。具体目标如下:构建可量化的质量属性评估指标体系:通过深入分析微服务架构的特点和业务需求,明确性能、可用性、安全性等关键质量属性的量化指标,为后续的评估和优化提供准确的数据支持。 设计基于…

2.28 AI课堂训练测试

老师要求我们用指令训练Ai完成我们开学测试的代码,锻炼我们的业务逻辑 开学测试要求:请设计一个仓储管理系统原型系统,该系统支持多个仓库的设立。统一设立物资台账,物资台账需包含物资编码、物资名称、规格、材质、供应商、品牌、物资分类,用户可以自定义物资的物资分类。…

Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!

Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来! 1. 优势介绍 Obsidian 是一款强大的本地知识管理软件,它像一个积木盒,让你用 Markdown 笔记搭建自己的知识宇宙。通过 双链笔记,你可以将不同的想法、灵感和信息连接起来,构建一个属于你自己的知识网络…

idea创建Spark项目报错记录

报错1:SparkException: A master URL must be set in your configuration解决方案:添加conf.setMaster("local"); local[“*”]中代表的是有几个线程,如果只写local就是单线程,如果是local[2]就是两个线程package com.fyq.spark.rdd;import org.apache.spark.Sp…