项目的最大收益(python)

参数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.csdn.net/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)

你可能感兴趣的:(leetcode)