本篇题解:核酸检测人员安排 | 总最快检测效率
题目
在系统、网络均正常情况下,组织核酸采样员和志愿者对人群进行核酸检测筛查。
每名采样员的效率不同,采样效率为N人/小时
。
由于外界变化,采样员的效率会以M人/小时
为粒度发生变化,M 为采样效率浮动粒度,M=N*10%
,输入保证N*10%
的结果为整数。
采样员效率浮动规则:
采样员需要一名志愿者协助组织才能发挥正常效率,再此基础上,每增加一名志愿者,效率提升1M
,最多提升3M
,如果没有志愿者协助组织,效率下降2M
。
怎么安排速度最快?求总最快检测效率(总检查效率为个采样人员效率值相加 )
输入
- 第一行:
- 第一个值,采样员人数,取值范围
[1,100]
; - 第二个值,志愿者人数,取值范围
[1,500]
;
- 第一个值,采样员人数,取值范围
- 第二行:
- 采样员基准效率值(单位人/小时),取值范围
[60,600]
, 保证序列中每项值计算10%
为整数
- 采样员基准效率值(单位人/小时),取值范围
输出
- 第一行:总最快检测效率(单位人/小时)
示例一
输入
2 2
200 200
输出
400
编码思路
下述代码的重点是 solve_method()
函数,该函数接收三个参数,分别是一个整数数组 arr,以及两个整数 x 和 y。
函数的目的是从数组 arr 中选取一些数,使得这些数的和最大,同时满足以下两个条件:
选取的数的个数不超过 y 个。
如果选取的数的个数不足 x 个,则必须选取前 y 个数中的所有数。
函数的实现逻辑如下:
将数组 arr 按照从大到小的顺序排序。
如果 y 小于 x,则选取前 y 个数中的所有数,并将剩余的 x-y 个数按照从大到小的顺序选取,其中每个数的价值为原价值的 80%。
如果 y 大于等于 x,则选取所有的 x