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

蓝桥每日打卡--背包问题

#蓝桥#JAVA#背包问题

题目描述

有一个背包,它的容量为 W = 4。有 3 个物品,它们的重量分别为 [2, 1, 3],价值分别为 [4, 2, 3]。问在不超过背包容量的情况下,能装入背包的物品的最大价值是多少?

解题思路

动态规划的核心在于将大问题分解为小问题,并保存小问题的解以避免重复计算。对于背包问题,我们定义一个二维数组 dp[i][w] 表示前 i 个物品放入容量为 w 的背包中所能获得的最大价值。状态转移方程为:

  • 当 w < weights[i-1] 时,dp[i][w] = dp[i-1][w],即当前物品重量超过背包容量,不能放入,最大价值不变。
  • 当 w >= weights[i-1] 时,dp[i][w] = max(dp[i-1][w], dp[i-1][w - weights[i-1]] + values[i-1]),即可以选择放入或不放入当前物品,取两者中的最大值。
代码实现
def knapsack(weights, values, W):
    n = len(weights)
    # 创建二维数组 dp
    dp = [[0 for _ in range(W + 1)] for _ in range(n + 1)]

    # 填充 dp 数组
    for i in range(1, n + 1):
        for w in range(1, W + 1):
            if w < weights[i - 1]:
                dp[i][w] = dp[i - 1][w]
            else:
                dp[i][w] = max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1])

    return dp[n][W]

http://www.dtcms.com/a/68553.html

相关文章:

  • Dask:Python高效并行计算利器
  • 基于Asp.net的物流配送管理系统
  • 学习15天:pytest
  • redis工具类
  • OpenCV实现图像特征提取与匹配
  • 【论文阅读方法】沐神课程:如何读论文
  • C#—线程池详解
  • 下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?
  • DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)
  • Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能
  • SHAP值理论(二)
  • ffmpeg 添加毫秒时间戳
  • Spring 中 SmartInitializingSingleton 的作用和示例
  • 无需微调的对齐方法URIAL
  • Android安全支付-整体架构-KeyStore2-APP到Framework层的调用
  • Vmware下的openEuler
  • Docker相关面试题
  • 算法沉淀五:位运算
  • 【Python 数据结构 15.哈希表】
  • JVM 2025/3/14
  • python-54-使用环境变量库python-dotenv进行应用程序配置参数的管理
  • 红色警戒2:共和国之辉红警语音台词是什么?
  • 【Vue.js】
  • docker python:latest镜像 允许ssh远程
  • VUE的脚手架搭建引入类库
  • 使用excel4node向excel批量写入图片
  • 2024 年第四届高校大数据挑战赛-赛题 A:岩石的自动鉴定
  • datax源码分析
  • 一个网络安全产品设计文档
  • Java高级-03.反射-获取构造器对象并使用