参数1,正数数组costs 参数2,正数数组profits 参数3, 正数k 参数4,正数m
costs[i]表示i号项目的花费 profits[i]表示i号项目在扣除花 费之后还能挣到的钱(利润) k表示你不能并行、只能串行的最多 做k个项目 m表示你初始的资金 说明:你每做完一个项目,马上获得的收益,可以支持你去做下 一个 项目。
贪心思路:其实建堆是比较好的,但是python的堆有点鸡肋,所以用list去代替了,主要就是构建一个项目,将benjin与zhuanqian去捆绑,健在一个cost按照benjin排序,一个profit按照利润最大排序,然后就好了。
链接里有伪代码
https://blog.youkuaiyun.com/weixin_41362649/article/details/94637472
benjin = [20,10,30]
zhuanqian = [21,15,33]
#这道题如果用python的话,建议还是用比较器和list去写
#堆有点难写,但是思路还是很清晰的
cost = []
for i in range(len(benjin)):
cost.append((benjin[i], zhuanqian[i]))
cost.sort(key = lambda x:x[0])
profit = cost
profit.sort(key = lambda x:x[1]-x[0])
profit = profit[::-1]
#k是项目的个数
k = 3
money = 100
for i in range(k):
if profit and profit[i][0] < money:
fk = profit[i][1] - profit[i][0]
tmp = profit[i]
money += fk
profit.remove(tmp)
cost.remove(tmp)