在 Python 中找到以优化方式填充水果所需的最低成本的程序
假设我们有一个名为fruits的列表和另外两个值k和cap。其中每个fruits[i]有3个值:[c,s,t],这表示每个水果i的成本为c,每个水果的大小为s,总共有t个。k代表容量上限的果篮数量。我们希望按照以下顺序填充水果篮-
每个篮子只能装相同类型的水果
每个篮子都应尽可能装满
每个篮子都应该尽可能便宜
因此,我们必须找到填充尽可能多的篮子所需的最低成本。
所以,如果输入像Fruits=[[5,2,3],[6,3,2],[2,3,2]]k=2cap=4,那么输出将是12,因为我们可以取两个水果0,因为有了这两个,我们可以使第一个篮子装满总大小2+2=4,花费5+5=10。然后,我们使用水果2中的一种,因为它更便宜。这需要2个单位。
示例
让我们看看以下实现以获得更好的理解-
def solve(fruits, k, cap): options = [] for c, s, t in fruits: while t > 0: fnum = min(cap //英石) if fnum == 0: break bnum = t //号码 options.append((cap - fnum * s, fnum * c, bnum)) t -= bnum * fnum ans = 0 for left_cap, bcost, bnum in sorted(options): bfill = min(k, bnum) ans += bcost * bfill k -= bfill if k == 0: break return ans fruits = [[5, 2, 3],[6, 3, 2],[2, 3, 2]] k = 2 cap = 4 print(solve(fruits, k, cap))
输入
[[5, 2, 3],[6, 3, 2],[2, 3, 2]], 2, 4输出结果
12