CodeVS1725 探险 【二分答案】【贪心】

在一次探险活动中,需要将编号1至n的同学分成k个小组,确保每个小组内的体力和最小。题目要求找到一种分组方式,使最弱小组的体力和尽可能大。通过分析数据范围(1≤n≤30000,1≤k≤1000,每个人的体力值≤10000),采用二分查找策略结合贪心算法,从大到小枚举答案,检查是否能形成k个小组且每个组的体力和大于等于当前枚举值,从而找到最佳分组方案。
摘要由CSDN通过智能技术生成

【题目描述】
有编号为1至n的n个同学一起去探险,现在把他们分成k个小组,每个小组完成一项探险任务。分组时,如果第i人与第j人分在同一组(i < j),则他们之间的所有人(第i+1,i+2,…,j-1个)也必须在同一个小组中。
一个小组内所有人的体力和越小,途中可能越危险。为了确保每个同学的安全,要求分组时,使得所有小组中,体力和最小的那个小组的所有人的体力和尽量大。
依次告诉你每个人的体力,如何分组呢?
【题解】
首先这个题CodeVS没有给数据范围,我查了一下,才知道是1≤n≤30000,1≤k≤1000, k≤n,每个人的体力值不大于10000。
这个题的意思是,要你在所有可能的分法中找出一种情况,使得最弱的那个组的体力和最大。很显然,我们是希望我们求的答案在这一组最小的情况下最大,如果我们枚举答案的话,这个答案应该是从大到小的,而枚举的思路就让我们想到了用二分答案。
想到了二分就要想怎么写check。很显然,我们想让其他的分组在每个组都大于枚举的那个答案的情况下还要满足分成k组的情况。这个是比较好写的。

#include<cstdio>
#include<cstring>
#include<algorithm>
using nam
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值