当前位置: 首页 > article >正文

动态规划算法--01背包问题详细讲解步骤

举个例子

要确定哪些物品被放入背包以达到最大价值,可以在计算 dp 数组的同时记录选择的物品。具体来说,可以使用一个额外的数组来记录每个状态的选择情况。以下是一个详细的步骤和代码实现:
在这里插入图片描述
在这里插入图片描述

n = 3
W = 5
weights = [2, 1, 3]
values = [6, 3, 5]

初始化 dp 和 choice 数组

dp = [[0] * (W + 1) for _ in range(n + 1)]
choice = [[0] * (W + 1) for _ in range(n + 1)]

print("初始状态:")
print("dp:")
for row in dp:
    print(row)
print("choice:")
for row in choice:
    print(row)

初始状态:
在这里插入图片描述

第1个物品(重量2,价值6)

# 第1个物品
for j in range(1, W + 1):
    if j >= weights[0]:
        if dp[0][j] < dp[0][j - weights[0]] + values[0]:
            dp[1][j] = dp[0][j - weights[0]] + values[0]
            choice[1][j] = 1
        else:
            dp[1][j] = dp[0][j]
    else:
        dp[1][j] = dp[0][j]

print("处理第1个物品后:")
print("dp:")
for row in dp:
    print(row)
print("choice:")
for row in choice:
    print(row)

在这里插入图片描述

第2个物品(重量1,价值3)

# 第2个物品
for j in range(1, W + 1):
    if j >= weights[1]:
        if dp[1][j] < dp[1][j - weights[1

http://www.kler.cn/a/407496.html

相关文章:

  • 汇编语言基础
  • 自动驾驶3D目标检测综述(三)
  • 【Redis】基于Redis实现秒杀功能
  • 使用Python 在Excel中创建和取消数据分组 - 详解
  • 《机器人控制器设计与编程》考试试卷**********大学2024~2025学年第(1)学期
  • Django启用国际化支持(2)—实现界面内切换语言:activate()
  • Oracle热备过程中对数据库崩溃的处理方法
  • Python爬虫能处理动态加载的内容吗?
  • C语言的文件函数
  • 如何在 Elasticsearch 中配置 SSL / TLS ?
  • win10局域网加密共享设置
  • 数据结构之——红黑树
  • Hive基础笔记
  • 【数据结构-队列】力扣232. 用栈实现队列
  • 洛谷 P1722 矩阵 II C语言 记忆化搜索
  • 对比学习——moco
  • Android 工厂设计模式的使用:咖啡机,可以做拿铁,可以做美式等等。
  • SCTransNet验证测试
  • 解决报错:rror: error:0308010C:digital envelope routines::unsupported
  • 利用软件实现发票的批量查验,并自动截图保存 91发票查验助手
  • 【C++】关于指针Free和链表循环释放的问题
  • websocket消息的实现
  • 【公开笔记】小白学习vue3完整版
  • 智能体来了:构建用于具有结构化输出的内容审核的智能 AI Agent 智能体
  • 【Isaac Sim】加载自带模型或示例时报 Isaac Sim is not responding
  • 联想ThinkServer服务器主要硬件驱动下载