当前位置: 首页 > 面试经验 >

【华为OD机试2023】工作安排(Python)

优质
小牛编辑
96浏览
2023-03-28

【华为OD机试2023】工作安排(Python)

题目描述:

小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定的工作时间内工作收入最大化。

输入描述:

输入的第一行为两个正整数T,n。T代表工作时长(单位h,0 < T < 100000),n代表工作数量(1 < n ≤ 3000)。 接下来是n行,每行包含两个整数t,w。t代表该项工作消耗的时长(单位h,t > 0),w代表该项工作的报酬。

输出描述:

输出小明指定工作时长内工作可获得的最大报酬。

示例1

输入:

40 3

20 10

20 20

20 5

输出:

30

解题思路:

挑选工作的优先级:

①单位时间工资高的优先

②在①一样的情况下,优先选择耗时长的(解释:如果总时长为40,(20,20)(40,40)的单位时间工资一样,如果选择时长20的工作,剩下的时间只能单位时间工资更低的工作,整体单位时间工资是小于1的;但如果选择时长40的工作,整体单位时间工资是1)

剩下没什么难度,就是用匿名函数来辅助排序


time,n=map(int,input().split())
task=[list(map(int,input().split())) for i in range(n)]
task_order=sorted(task,key=lambda x:10000*x[1]/x[0]+x[0],reverse=True)
money=0
for i in range(n):
if time>0:
if time>=task_order[i][0]:
money+=task_order[i][1]
time-=task_order[i][0]
else:
continue
else:
break
print(money)

#华为机试,emo了#
 类似资料: