当前位置: 首页 > 编程笔记 >

在Python中实现分数背包问题的程序

党浩阔
2023-03-14
本文向大家介绍在Python中实现分数背包问题的程序,包括了在Python中实现分数背包问题的程序的使用技巧和注意事项,需要的朋友参考一下

假设我们有两个列表,权重和相同长度的值,以及另一个值容量。权重[i]和值[i]表示第i个元素的权重和值。因此,如果我们最多可以采用容量权重,并且可以按比例取值,则占项目权重的一小部分,则必须找到可以得到的最大值(四舍五入为最接近的整数)

因此,如果输入像权重= [6,7,3]值= [110,120,2]容量= 10,那么输出将是178。

为了解决这个问题,我们将遵循以下步骤-

  • res:= 0

    • cif容量为0,则

    • 如果pair [0]>容量,则

    • 否则,当pair [0] <=容量时,则

    • 从循环中出来

    • res:= res +(pair [1] /(pair [0] /容量)的商

    • 容量:= 0

    • res:= res +对[1]

    • 容量:=容量-对[0]

    • 列出具有权重和值的对P的列表,并根据每个权重的值对它们进行排序

    • 对于P中的每对

    • 返回res的底值

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

    示例

    class Solution:
       def solve(self, weights, values, capacity):
          res = 0
          for pair in sorted(zip(weights, values), key=lambda x: - x[1]/x[0]):
             if not bool(capacity):
                break
             if pair[0] > capacity:
                res += int(pair[1] / (pair[0] / capacity))
                capacity = 0
             elif pair[0] <= capacity:
                res += pair[1]
                capacity -= pair[0]
          return int(res)
    
    ob = Soluthtml" target="_blank">ion()weights = [6, 7, 3]
    values = [110, 120, 2]
    capacity = 10
    print(ob.solve(weights, values, capacity))

    输入值

    [6, 7, 3],[110, 120, 2],10

    输出结果

    230
     类似资料:
    • 本文向大家介绍解决分数背包问题的C ++程序,包括了解决分数背包问题的C ++程序的使用技巧和注意事项,需要的朋友参考一下 在小背包问题中,给出了一组项目,每个项目都有一个权重和一个值。我们需要打破物品以最大化背包的总值,这可以通过贪婪的方法来完成。 算法 范例程式码 输出结果

    • 主要内容:贪心算法解决部分背包问题在限定条件下,如何从众多物品中选出收益最高的几件物品,这样的问题就称为背包问题。   图 1 背包问题 举个简单的例子,商店的货架上摆放着不同重量和价值的商品,一个小偷在商店行窃,他携带的背包只能装固定重量的商品,选择哪些商品才能获得最大的收益呢?这个问题就属于背包问题,限定条件是背包的承重,最终目标是令背包中存放的物品的总收益最高。 根据不同的限定条件,背包问题还可以有更细致的划分: 0-1 背

    • 主要内容:动态规划解决01背包问题,01背包问题的具体实现商店的货架上摆放着不同重量和价值的商品,一个小偷在商店行窃,他携带的背包只能装固定重量的商品。装哪些商品才能获得最大的收益呢?在限定条件内找到最佳的物品组合,这样的问题统称为背包问题。 根据限定的条件不同,背包问题还可以细分: 部分背包问题:所有物品是可再分的,即允许将某件物品的一部分(例如 1/3)放入背包; 0-1 背包问题:所有物品不可再分,要么整个装入背包,要么放弃,不允许出现“仅选择物品

    • 本文向大家介绍小背包问题,包括了小背包问题的使用技巧和注意事项,需要的朋友参考一下 列出了物品列表,每件物品都有自己的值和重量。物品可以放在最大重量限制为W的背包中。问题是要找到小于或等于W的重量,并且值要最大化。 背包问题有两种。 0 – 1背包 小背包 对于0 – 1背包,不能将物品分成小块,对于小背包,可以将物品分成小块。 在这里,我们将讨论分数背包问题。 该算法的时间复杂度为O(n Log

    • 在这里,我的直觉是将所有列表排序在一起,或者更确切地说,使用unit_prices的排序顺序来确定其他列表的顺序,但我不确定如何实现它。

    • 问题 你面前摆放着 n 个珠宝(共 n 种,每种 1 个),这些珠宝被分成 m 个组(显然 n geq m )。已知珠宝 s_i 的价值是 v_i ,重量是 w_i 。给你一个背包,你可以挑选珠宝装到背包中,但背包可以装载的最大重量为 t ,并且同一个组的珠宝至多只能选择 1 个。求背包能够装载珠宝的最大价值 v 。 该问题与01背包的区别就是,对珠宝进行了分组,并且一个组内的珠宝互斥。 解法 设