首页 > 其他分享 >dp-01背包

dp-01背包

时间:2024-07-19 18:51:13浏览次数:5  
标签:01 背包 weights 物品 放入 dp

01背包问题是动态规划中的一个经典问题,通常用于解决资源分配问题。问题描述如下:

假设有一个背包,其最大承重为 $ W )。同时,有 $ n ) 个物品,每个物品有一个重量 $ w_i ) 和一个价值 $ v_i )。目标是选择一些物品放入背包,使得在不超过背包承重的前提下,背包中物品的总价值最大。

问题特点

  • 01性质:每个物品要么选择放入背包(1),要么不放入背包(0),不能选择部分放入或多次放入。

动态规划解法

动态规划(Dynamic Programming, DP)是解决01背包问题的常用方法。我们可以通过构建一个二维数组 $ dp ) 来记录状态,其中 $ dp[i][j] ) 表示前 $ i ) 个物品在总重量不超过 $ j ) 的情况下可以获得的最大价值。

状态转移方程

  • 如果不选择第 $ i ) 个物品,则 $ dp[i][j] = dp[i-1][j] )。
  • 如果选择第 $ i ) 个物品,则 $ dp[i][j] = dp[i-1][j-w_i] + v_i ),前提是 $ j geq w_i )。

因此,状态转移方程可以写成:
[ dp[i][j] = max(dp[i-1][j], dp[i-1][j-w_i] + v_i) ]

初始化

  • $ dp[0][j] = 0 $ 表示没有物品时,无论背包容量是多少,最大价值都是0。
  • $ dp[i][0] = 0 $ 表示背包容量为0时,无论有多少物品,最大价值都是0。

填表过程

从 $i = 1$ 到 $ n $ 和 $ j = 0 $ 到 $ W $ 依次填表,最终 $ dp[n][W] $ 就是所求的最大价值。

空间优化

由于每次计算 $dp[i][j]$只依赖于$dp[i-1][j]$和$dp[i-1][j-w_i]$,因此可以将二维数组优化为一维数组。优化后的状态转移方程为:
[dp[j]=max(dp[j],dp[j-w_i]+v_i)]

需要注意的是,在更新$dp[j])时,$j)需要从$W)递减到$w_i),以保证每个物品只被选择一次。

代码实现

以下是01背包问题的Python代码实现:

def knapsack(W, weights, values):
    n = len(weights)
    dp = [0] * (W + 1)
    
    for i in range(n):
        for j in range(W, weights[i] - 1, -1):
            dp[j] = max(dp[j], dp[j - weights[i]] + values[i])
    
    return dp[W]

总结

01背包问题通过动态规划的方法,可以在多项式时间内解决。通过构建状态转移方程和优化空间复杂度,可以高效地求解背包问题。

标签:01,背包,weights,物品,放入,dp
From: https://www.cnblogs.com/mcr130102/p/18312147

相关文章

  • JavaScript 基础知识 Day01
    一、计算机基础知识1、计算机数据存储单位位(Bit):1bit可以保存一个0或者1(最小的存储单位)字节(Byte):1B=8b千字节(KB):1KB=1024B兆字节(MB):1MB=1024KB吉字节(GB):1GB=1024MB太字节(TB):1TB=1024GB2、关于JavaScript 它是在1952年2月由网景开......
  • 安川伺服驱动器SGDV-1R6A01B002000的应用
    YASKAWA安川伺服电机及驱动器应用YASKAWA安川伺服电机及驱动器是一种运动控制设备,可以广泛应用于各种机器人、自动化系统、数控机床等行业中。安川伺服系统采用先进的控制技术、传感器技术和电机技术,能够稳定、精准地执行各种运动控制任务。以下是安川伺服电机及驱动器的应用......
  • 安川伺服驱动器SGDV-200A01A002000
    安川驱动器工作原理一、工作原理安川驱动器是一种在工业生产过程中广泛使用的电子设备,主要用于控制和调节电机的运转。安川驱动器是由交流电源产生交流电信号,通过变频控制芯片将交流电信号转化为直流电信号,再通过逆变电路将直流电信号转化为可调频率和电压的交流电信号,最终控......
  • 初学js Day01
    JavaScript的由来(js)1995年2月发布的,NetscapeNavigator2浏览器开发一种名为LiveScript的脚本语言。为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟,共同开发LiveScript。在NetScapeNavigator2发布前夕,网景为了更好地推广这个脚本语言......
  • 101文章解读与程序——中国电机工程学报EI\CSCD\北大核心《考虑气电联合需求响应的
    ......
  • 【MATLAB源码-第149期】基于MATLAB的2ASK,2FSK,2PSK,2DPSK等相干解调仿真,输出各节点波
    操作环境:MATLAB2022a1、算法描述2ASK(二进制幅移键控)、2FSK(二进制频移键控)、2PSK(二进制相移键控)和2DPSK(二进制差分相移键控)是数字调制技术中的基本调制方式,它们在无线通信、数据传输等领域有着广泛的应用。相干解调是这些调制方式中一个重要的解调技术,它要求接收端的本地振......
  • hive01_入门
    hive简介为什么产生hive?MapReduce提供了通用的分布式开发能力,但是是一个通用的计算引擎,对于一些特殊的数据处理效率较低。比如常见的结构化数据用SQL处理,但是数据达到某个量级后单机数据库无法承受,势必要转向大数据平台,而大数据平台有自己单独的计算引擎,所以之前所有使用S......
  • CCT361H5S LEC0101 Speculative Design
    CCT361H5SLEC0101SpeculativeDesignIICourseOutline-Winter 2024CourseDescriptionInthiscoursestudentsareintroducedtoprogramminglanguagesregularly used in management operations. Students will learn what theselanguagesare,whenandw......
  • windows远程桌面打开rdp 调用显卡
    -----------------------------------------------------------------------------------------------------------前情提要:服务器在公网环境,带宽只有30M。远程桌面多开玩游戏,设置RDP服务端使用GPU。压缩传输带宽避免造成卡顿。如果是内网,也可以用,还可以提供一个注册表键值,修......
  • Zabbix监控 MS SqlServer2019
    Zabbix监控MSSqlServer2019 环境:Zabbix7.0LTS,sqlserver2019 在mssqlserver的服务器上安装好agent2和插件:zabbix_agent2_plugins-7.0.0-windows-amd64.msi,其中有mssql的必要插件.zabbix_agent2-7.0.0-windows-amd64-openssl.msi,zabbix新一代收集数据的客户......