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

贪心,算法,背包,问题,分数 · 浏览次数 : 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 周赛 338,贪心 / 埃氏筛 / 欧氏线性筛 / 前缀和 / 二分查找 / 拓扑排序

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

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

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

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

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

LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是 LeetCode 第 343 场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。

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

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