1. 题目描述
  2. 问题分析
    这个题目是一类典型的二分答案问题,题目中给出我们需要将给定的长度切割成相应的K段,并且保证切割的小段的最大长度,那么我们怎么做呢,必然是在一定的区间枚举出来该切成多少才能满足切成k段并且保证长度最大,其实这里我们可以考虑二分的思想,比方说,我们最大能切的长度必然不会比原来的木头的最大的那一根还要长,并且我们确定最小可以切出1cm,若是1cm切不出便输出0.
    那么二分区间的左端点l = 1, 右端点r = max({l1, l2, l3, l4…ln)
    我们该怎么找呢在这个二分区间内我们就像二分查找类似的写法,在左边子区间或者右边子区间逐步逼近找出误差最小的答案,我们这时不能像二分查找对应元素那样去考虑,而是写一个check函数,我比较喜欢叫check,然后我们将每一个木头切割这个长度(向下取整)然后将可以切割的数量相加在与给定切割的数目k作为比较,如果res >= k那么证明,所切割的值偏小,那么我们应该往右区间去找,反之找左区间。
bool check(LL x) {LL res = 0;for (int i = 1; i <= n; i++) {res += a[i] / x;}return res >= K;
}
  1. AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + 5;LL a[maxn];int n;
LL K;
LL l = 1, r = -1;bool check(LL x) {LL res = 0;for (int i = 1; i <= n; i++) {res += a[i] / x;}return res >= K;
}int main() {scanf("%d%lld", &n, &K);for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);r = max(r, a[i]);}LL ans = 0;while (l <= r) {LL mid = (l + r) >> 1;if (check(mid)) {ans = mid;l = mid + 1;} else {r = mid - 1;}}printf("%lld\n", ans);return 0;
}

总结:
二分答案是在竞赛中常考的类型,其思想也是基于二分的变形,分析问题,给出以下常见题目中的关键字,判断是否使用二分。
第一类问题:
二分答案应用求解问题
求最大长度中的可能最小值是多少
问最小重量的最大值是多少

第二类问题:
最少要多少才能满足要求
在满足限制的情况下最大值是多少

对于第二类问题,我们可以抽象
对于x, 有一个函数f(x), 值域为{0,1}
求满足f(x) = 0时 x的最大值

将第一类问题转换为第二类问题

对于第一类问题
我们抽象:

对于x, 有一个函数f(x)
求当满足f(x) <= M时x的最大值 。

二分答案——洛谷P2440木材加工相关推荐

  1. 洛谷 P2440 木材加工 (二分答案)

    P2440 木材加工 题意 给定N个木头及其长度,要求把这些木头切割成M块长度相同的小段木头(木头有可能有剩余),求小段木头的最大值. 比如:有两木头长度为 11 和 21, 要求切成 6 块, 那么 ...

  2. 洛谷 P2440 木材加工(二分,含边界处理的笔记)

     题目链接: 木材加工 - 洛谷https://www.luogu.com.cn/problem/P2440 非常简单的题目,用left和right控制二分边界,ans一开始是0,每次check到符合 ...

  3. 二分查找和二分答案(洛谷)

    细节好可怕~ 二分查找算法的细节剖析_JackComeOn的博客-CSDN博客原文:https://www.cnblogs.com/kyoner/p/11080078.html我周围的人几乎都认为二分 ...

  4. 洛谷——P2440 木材加工

    https://www.luogu.org/problem/show?pid=2440#sub 题目背景 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木 ...

  5. 二分答案——木材加工(洛谷 P2440)

    题目选自洛谷P2440 读完题目后应该有个大致思路,看得出来是二分查找的题. 首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大.题中写道数组中的数最大不会超 ...

  6. 【二分答案】Problem C:木材加工

    Problem C:木材加工 Time Limit:1000MS Memory Limit:65536K  Total Submit:48 Accepted:20 Description [问题描述] ...

  7. 洛谷P2240木材加工

    题目链接 洛谷P2240 题目描述 木材厂有 n根原木,现在想把这些木头切割成 k 段长度为l的小段木头(木头有可能有剩余). 当然,我们希望得到的小段木头越长越好,请求出 l的最大值. 木头长度的单 ...

  8. 跳跳棋[LCA+二分查找]-洛谷1852

    传送门 这真是一道神仙题 虽然我猜到了这是一道LCA的题 但是... 第一遍看题,我是怎么也没想到能和树形图扯上关系 并且用上LCA 但其实其实和上一道lightoj上的那道题很类似 只不过那时一道很 ...

  9. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

最新文章

  1. 病毒进入体内的48小时
  2. Vcenter5.5安装部署:[2]web client的安装
  3. BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治
  4. QSettings allKeys读取为空分析
  5. “掌上神策”上线,数据解读随时随地
  6. Elasticsearch 实例管理在京东的使用场景及演进之路
  7. 2018“百度之星”程序设计大赛 - 复赛
  8. 《Python学习之路 -- 字符串的方法》
  9. 苹果概念手机_吊打华为苹果!马云概念手机终于问世?
  10. Python模块_re正则表达式模块-2
  11. 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
  12. 如果你学习C 请不要选择DevCpp
  13. 网卡驱动DM9000-基于uboot
  14. 阿尔伯塔大学计算机科学的申请条件,阿尔伯塔大学计算机科学硕士专业
  15. [图文]TDateTime And TTime(转)
  16. 漫画算法:什么是跳跃表?
  17. 现在社会趋势下,很多人想做网上商城,那你知道软件部署方式吗?
  18. MyHandler.h对消息accu的处理
  19. OneDrive登录失败解决办法
  20. CentOS7 初次安装记录(三)配置PHP和MYSQL

热门文章

  1. 水仙花数python代码多种方式_水仙花数的三种解决方法(Python实现)
  2. 计算机二级考试怎么练题库,计算机二级考试单选题训练题库
  3. 数值分析matlab最小二乘法,数值分析 最小二乘 matlab
  4. 两个UE免费开源小游戏
  5. 一、【s3c2440移植linux-3.5】移植准备
  6. 全球及中国同步相量测量装置行业研究及十四五规划分析报告(2022)
  7. 测试人员面试需要掌握的内容
  8. 前端面试八股文(详细版)—上
  9. 显示器经典故障以及处理办法
  10. 【VulnHub靶机渗透】一:BullDog2