部门人力分配(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)