首页 > 其他分享 >动态规划+0-1背包问题

动态规划+0-1背包问题

时间:2024-07-16 22:25:39浏览次数:15  
标签:背包 weight max value current 价值 combinations 动态 规划

一、问题描述

小明周末要参加学校组织的跳蚤市场活动,他准备了足球、旱冰鞋、随身听和单词书四件物品进行交易,要用他的书包把这些物品带到学校。各物品的重量w和价值v如下图所示,小明书包的最大承重量为9(忽略单位),请你帮助他找到最合理的搭配方案,使他能用书包带到学校的物品价值最大。

二、问题解决

def find_all_max_value_combinations(weights, values, names, max_weight):  
    n = len(weights)
    all_best_combinations = []  # 用来存储所有最大价值的组合
    max_value = 0  

    def backtrack(index, current_weight, current_value, current_combination):  
        nonlocal max_value, all_best_combinations
        if index == n:  
            if current_weight <= max_weight and current_value > max_value:
                max_value = current_value
                all_best_combinations = [current_combination.copy()]#更新最大价值和对应的组合
            elif current_weight <= max_weight and current_value == max_value:
                all_best_combinations.append(current_combination.copy())#相同价值的组合也加入列表
            return  
        # 不选择当前物品
        backtrack(index + 1, current_weight, current_value, current_combination)  

        # 选择当前物品
        if current_weight + weights[index] <= max_weight:  
            current_combination.append(index)  
            backtrack(index + 1, current_weight + weights[index], current_value + values[index], current_combination)  
            current_combination.pop()  # 回溯时移除添加的物品索引

    # 初始调用回溯函数,寻找最大价值组合
    backtrack(0, 0, 0, [])
    return max_value, all_best_combinations

weights = [2, 4, 5, 3]  
values = [5, 4, 6, 2]  
names = ["足球", "旱冰鞋", "随身听", "单词书"]  
max_weight = 9  

max_value, all_best_combinations = find_all_max_value_combinations(weights, values, names, max_weight)  

print(f"最大价值为:{max_value}")
if all_best_combinations:  
    print("所有可能的最佳价值组合为:")
    for combination in all_best_combinations:
        print([names[i] for i in combination], "总重量:", sum(weights[i] for i in combination), 
              "对应价值:", sum(values[i] for i in combination))
else:
print("没有找到符合条件的组合。")



三·、思路分析

本程序实现了一个基于回溯算法来解决0-1背包问题,目的是找到在不超过背包最大承重的情况下,可携带物品的最大总价值。本程序首先计算出最大的价值,再寻找所有价值达到最大价值的组合,如果找到,则输出所有最佳价值组合,反之则给出没有符合条件的组合的提示。

标签:背包,weight,max,value,current,价值,combinations,动态,规划
From: https://blog.csdn.net/weixin_75253037/article/details/140407408

相关文章

  • 软考高级第四版备考--第21天(规划采购管理)Plan Procurement Management
    定义:记录项目采购决策、明确采购方法及识别潜在卖方的过程。作用:确定是从项目外部获取货物或服务,如果是,则还要确定时间、以什么方式获取什么货物和服务。说明:步骤:1、准备采购工作说明书或工作大纲(TOR)2、准备高层级成本估算,制定预算;3、发布招标广告;4、确定并发布招标文......
  • 喜欢dp动态规划的第二天(暑假提升)
    不要失去信心,只要坚持不懈,就终会有成果。——钱学森dp动态规划题目详解--第二天前言1、最长定差子序列2、最长等差数列3、等差数列划分II-子序列4、回文子串5、总结前言由于上一期的动态规划我觉的太过于繁琐,所以这次简化一下操作,题目概念解析将不会再写,我直......
  • 随手记:Bruno动态注入Header
    因为PostMan启动太慢,动不动就要登录,以及防火墙的问题,搞起来挺麻烦,一气之下就换了Bruno来管理API请求,接口的安全校验也是很正常的事儿,最近有个兄弟部门使用了参数+时间戳+HmacSHA256校验,把校验的Sign放到Header里,研究了下,做个记录,方便随取随用,这种动态的Header需要使用Script:cons......
  • winform 动态截断或者补全文字宽度
    使用TabControl时,发现它的选项卡宽度会随文字长度变化,我自己做了一个浏览器,发现很难看,于是写了上算法,对文字长度进行填充或截断,效果很不错: 调用代码:using(varg=tabs.CreateGraphics()){tabPage.Text=""+PadAndEllipsis(g,tabs.Font,title,150)+""......
  • 路径规划 | 基于DQN深度强化学习算法的路径规划(Matlab)
    目录效果一览基本介绍程序设计参考文献效果一览基本介绍DQN路径规划算法基于深度强化学习算法的路径规划matlab2023b栅格环境,走迷宫,可以通过窗口界面方便观察交互过程,代码注释详尽。程序设计完整源码和数据私信博主回复基于DQN深度强化学习算法的路径规划(Ma......
  • 【DG】DataGuard动态性能视图及日志传输/应用服务说明
    一、DataGuard相关动态性能视图 序号 动态性能视图名称 说明1 v$database 查询打开模式,角色,保护模式,保护级别2 v$managed_standby 备库查询进程情况,RFS、MRP03 v$standby_log 查看standbyredolog4 v$archive_dest_statu......
  • 聊聊springboot项目脱离配置中心,如何实现属性动态刷新
    前言如果大家有开发过微服务项目,那对配置中心应该是耳熟能详了,配置中心有个很有用的能力,就是热更新属性,即不重启服务,就能做到属性的动态变更。而我们今天讲的话题是,怎么样不使用配置中心,也能达到如上的效果如何实现属性的热更新如果我们属性是配置在配置文件中,我们可以通过监听......
  • 新时代多目标优化【数学建模】领域的极致探索——数学规划模型
    目录例11.问题重述 2.基本模型  变量定义:目标函数:约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 ​编辑 7.敏感性分析 8.结果解释例2奶制品的销售计划1.问题重述 ​编辑 2.基本模型3.模型求解 4.结果解释 3.整数规划的实......
  • 矩阵优化 DP 以及全局平衡二叉树实现的动态 DP 学习笔记
    矩阵乘法求斐波那契数列的第\(n\)项,其中\(n\le10^{18}\),对数\(m\)取模。写出转移方程,\(f_i=f_{i-1}+f_{i-2}\),直接算是\(O(n)\)的,似乎没什么办法优化。定义大小分别为\(n\timesp\)和\(p\timesm\)的矩阵(分别为\(a\)和\(b\))相乘的结果(矩阵\(c\))是一个大小为\(......
  • 快速入门:自动驾驶感知工程师的规划与决策核心技巧
    亚马逊云AWS大模型训练自动驾驶技术欢迎来到雲闪世界,亚马逊AWS雲服务器。经典的模块化自动驾驶系统通常由感知、预测、规划和控制组成。直到2023年左右,AI(人工智能)或ML(机器学习)主要在大多数量产自动驾驶系统中增强感知,其影响力在下游组件中逐渐减弱。与规划堆栈中AI的......