OD C卷 - 部门人力分配

部门人力分配(200)

  • requirements表示开发需求数组,每个值表示当前需求的月数,所有需求需要在m个月内完成;
  • 每个月最多有2个需求完成开发;人力安排后每个月人力是固定的;
  • 在满足需求开发进度的情况下,每个月需要的最小人力是多少?
    输入描述:
    第一行输入m
    第二行输入requirements 数组, 值>=1 长度为n;
    1<=n/2<=m<=n<=10000
    输出描述:
    输出部门需要的人力?

示例1
输入:
3
3 5 3 4
输出:
6
说明:
开发时间为5个月的需求在一个月内完成,则需要5个人;
3 3 合并到一个月完成,需要6个人力;
3 4合并到一个月完成,需要7个人力;
4 5合并到一个月完成,需要9个人力;

示例2
输入:
3
3 3 4 5 6
输出:
8

示例3
输入:
3
3 3 4 5 6 2
输出:

思路:

  • 人力范围在requirements的最大值—最大值+次最大值 之间;

 
m = int(input())
nums = [int(x) for x in input().split(" ")]
nums.sort()
 
def cal(k, nums, length) :
    low = 0
    high = length - 1
    months = 0
    while (True) :
        if(low > high):
            break
        else :
            if (nums[low] + nums[high] > k) :
                high -= 1
            else :
                low += 1
                high -= 1
            
            months+=1
    return months
 
 
low = nums[len(nums)-1]
high = nums[len(nums)-1] + nums[len(nums)-2]
 
result = -1
while (True) :
    if(low > high):
        break
    else :
        k = int((low + high) / 2)
        if (cal(k, nums, len(nums)) <= m) :
            high = k - 1
            result = k
        else :
            low = k + 1
print(result)

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值