项目的最大收益(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.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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值