贪心算法--背包问题--分数背包

贪心,算法,背包,问题,分数 · 浏览次数 : 7

小编点评

**博客地址:**`https://www.cnblogs.com/zylyehuo/# -*- coding: utf-8 -*-stuffs = [(60, 10), (100, 20), (120, 30)]` **代码:**`fractional_backpack(goods, w)` **描述:**该函数用于解决分数背包问题,并返回一个包含总价值和购买商品数量的列表。 **参数:** * `goods`: 一组商品元组,每个元组表示(价格, 重量)。 * `w`:背包可承受的重量。 **返回值:** * 一对元组,其中第一个元素是总价值,第二个元素是购买商品数量的列表。 **步骤:** 1. 初始化一个列表 `m`,其中长度为 `len(goods)`。每个元素代表商品的购买比例。 2. 遍历 `goods` 中的每个商品元组。 3. 如果商品可被放入背包,则将其购买数量加到 `total_v` 中。 4. 如果商品不能被放入背包,则将其购买比例加到 `m` 中。 5. 返回一个包含 `total_v` 和 `m` 的列表。 **示例:** ```python print(fractional_backpack(stuffs, 50)) # 输出: # ===========================分数背包问题========================= # 共2元,各买2元 # ============================================================== ``` **总结:** 该程序使用分数来表示商品的购买比例,并通过遍历商品和添加购买权重来找到可放入背包的商品。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

stuffs = [(60, 10), (100, 20), (120, 30)]  # 每个商品元组表示(价格, 重量)
stuffs.sort(key=lambda x: x[0] / x[1], reverse=True)


def fractional_backpack(goods, w):
    m = [0 for _ in range(len(goods))]
    total_v = 0
    for i, (price, weight) in enumerate(goods):
        if w >= weight:
            m[i] = 1
            total_v += price
            w -= weight
        else:
            m[i] = w / weight
            total_v += m[i] * price
            break
    return [total_v, m]


print("=========================分数背包问题=========================")
print(f"共{fractional_backpack(stuffs, 50)[0]}元,各买{fractional_backpack(stuffs, 50)[1]}")
print("============================================================")

与贪心算法--背包问题--分数背包相似的内容:

贪心算法--背包问题--分数背包

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- stuffs = [(60, 10), (100, 20), (120, 30)] # 每个商品元组表示(价格, 重量) stuffs.sort(key=lambda x:

探索贪心算法:解决优化问题的高效策略

贪心算法是一种在每一步选择中都采取当前最佳选择的算法,以期在整体上达到最优解。它广泛应用于各种优化问题,如最短路径、最小生成树、活动选择等。本文将介绍贪心算法的基本概念、特点、应用场景及其局限性。 贪心算法的基本概念 贪心算法的核心思想是局部最优策略,即在每一步选择中都选择当前看起来最优的选项,希望

贪心算法--找零问题

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- t = [100, 50, 20, 5] def change(t, n): m = [0 for _ in range(len(t))] # m 为各面额纸币的张数 for

贪心算法--拼接最大数字问题

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- from functools import cmp_to_key def xy_cmp(x, y): if x + y < y + x: return 1 # 表示 x>y

贪心算法--活动选择问题

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- def activity_selection(a): res = [a[0]] for i in range(1, len(a)): if a[i][0] >= res[-1

算法学习笔记(∞):杂项

杂项 目录杂项代码规范算法优化的本质记忆化搜索基于边的记忆化动态规划树上每一个点求答案计数题关于仙人掌 DAG 的拓扑序计数关于微扰贪心的证明组合数前缀和单位根反演\(O(n^2)\) 状态求和矩形式子求和\(O(n^2)\) 状态 \(O(n)\) 单点问题CDQ 分治FFT 循环卷积根号多项式算

刷爆 LeetCode 周赛 337,位掩码/回溯/同余/分桶/动态规划·打家劫舍/贪心

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加了吗?这场周赛第三题有点放水,如果按照题目的数据量来说最多算 Easy 题,但如果按照动态规划来做可以算 Hard 题。 小彭的技术交

LeetCode 周赛 338,贪心 / 埃氏筛 / 欧氏线性筛 / 前缀和 / 二分查找 / 拓扑排序

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 338 场周赛,你参加了吗?这场周赛覆盖的知识点很多,第四题称得上是近期几场周赛的天花板。 小彭的技术交流群 02 群来了,公众号回复 “加群” 加入我们~

刷爆 LeetCode 周赛 339,贪心 / 排序 / 拓扑排序 / 平衡二叉树

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加了吗?这场周赛覆盖的知识点比较少,前三题很简单,第四题上难度。 周赛大纲 2609. 最长平衡子字符串(Easy) 模拟:$O(n)$

LeetCode 双周赛 101,DP/中心位贪心/裴蜀定理/Dijkstra/最小环

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈。上周末这场是 LeetCode 第 101 场双周赛,整体有点难度,第 3 题似乎比第 4 题还难一些。 周赛大纲 2605. 从两个