当前位置: 首页 > 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]

相关文章:

  • 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
  • 贵州省委军民融合发展委员会办公室副主任李刚接受审查调查
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 缅甸内观冥想的历史漂流:从“人民鸦片”到东方灵修
  • 将人工智能送上太空,我国太空计算卫星星座成功发射
  • 崔登荣任国家游泳队总教练
  • 远如《月球背面》,近似你我内心