在Python中找到优化填充水果所需最低成本的程序

在Python中找到优化填充水果所需最低成本的程序

假设我们有一个名为fruits的列表和另外两个值k和cap。每个fruits[i]都有三个值:[c,s,t],这表示水果i的成本为每个c,每个水果的大小为s,总共有t个。 k表示容量为cap的水果篮子的数量。我们想要以以下限制依次填充水果篮子-

  • 每个篮子只能装同类型的水果
  • 每个篮子应该尽可能地满
  • 每个篮子应该尽可能便宜

因此,我们必须找到填充尽可能多篮子所需的最低成本。

因此,如果输入如fruits= [[5,2,3],[6,3,2],[2,3,2]] k = 2 cap = 4,那么输出将是12,因为我们可以取两个0号水果,因为这两个水果,我们可以使第一个篮子总大小为2 + 2 = 4,它的成本为5 + 5 = 10。然后,我们使用其中一个水果2,因为它更便宜。这需要2个单位。

为了解决这个问题,我们将按照以下步骤进行-

  • options:一个新的列表
  • 对于fruits中的每个三元组(c,s,t),执行以下操作
    • 当t > 0时,做以下操作
      • fnum:cap / s和t的底部的最小值
      • 如果fnum与0相同,则
      • 从循环中出来
      • bnum:t / fnum的底部
      • 在options结尾处插入三元组(cap – fnum * s,fnum * c,bnum)
      • t:t – bnum * fnum
  • ans:0
  • 对于options的排序列表中的每个三元组(left_cap,bcost,bnum),执行以下操作:
    • bfill:k和bnum的最小值
    • ans:ans + bcost * bfill
    • k:k – bfill
    • 如果k与0相同,则
      • 从循环中出来
  • return ans

例子

让我们看看以下实现,以更好地理解-

def solve(fruits,k,cap):
  options = []
  for c,s,t in fruits:
    while t> 0:
      fnum = min(cap // s,t)
      如果fnum == 0:
          打破
      bnum = t // fnum
      options.append ((cap-fnum * s,fnum * c,bnum))
      t -= bnum * fnum
  ans = 0
  for left_cap,bcost,bnum在排序选项中:
      bfill = min(k,bnum)
      ans + = bcost * bfill
      k -= bfill
      如果k == 0:终止
  返回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 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程