01背包

news/2025/3/5 10:35:11/

01背包

0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。

问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?

更具体的,抽象问题为:

有n个可选项,价值为vi,耗费wi,在总耗费为C的情况下选取,求总价值最大

使用dp[i][j]表示面对第i个可选项,耗费为j时所能取到的最大值,面临的只有两种选择,取当前项,或者不取当前项:
d p [ i ] [ j ] = { d p [ i − 1 ] [ j ] , j < w i m a x ( d p [ i ] [ j − w i ] + v i , d p [ i − 1 ] [ j ] ) j > = w i dp[i][j]=\begin{cases}dp[i-1][j], &\text j<wi \\ max(dp[i][j-wi]+vi,dp[i-1][j]) &\text j>=wi \end{cases} dp[i][j]={dp[i1][j],max(dp[i][jwi]+vi,dp[i1][j])j<wij>=wi
自底向上遍历,先遍历物品,再遍历耗费,相当于先记录下来了底层物品,低容量的记录,顶层知道记录,因此可以快速做出判断。

    for(int i=1;i<=n;i++){for(int j=1;j<=c;j++){if(j>=w[i])m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);elsem[i][j]=m[i-1][j];}}

需要注意的是,任何动归实现时都要注意边界条件与底层条件的设置,一定要符合公式的语义

确定能获取最大价值的选择项

另起一个 x[ ] 数组,x[i]=0表示不拿,x[i]=1表示拿。m[n][c]为最优值,如果m[n][c]=m[n-1][c] ,说明有没有第n件物品都一样,则x[n]=0 ; 否则 x[n]=1。当x[n]=0时,由m[n-1][c]继续构造最优解;当x[n]=1时,则由x[n-1][c-w[i]]继续构造最优解。以此类推,这种方式只能获取一个最优解。

    for(int i=n;i>1;i--){if(m[i][c]==m[i-1][c])x[i]=0;else{x[i]=1;c-=w[i];//向下寻找}}x[1]=(m[1][c]>0)?1:0;//只剩下最后一个了,判断是否能拿即可

http://www.ppmy.cn/news/362309.html

相关文章

好友相赠一天文望远镜BOSMA60/700型 如获至宝

产品代码开拓者60/700光学系统折射式主镜口径(mm)60焦距(mm)700焦比11.7分辨率(*)1.93极限星等10.8集光力73x主镜重量0.75KG主镜长度72cm赤道仪U 型脚架TP3毛重(kg)3编码11021 冠(BOSMA)60/700天文望远镜全套组成 寻星镜5X24寻星镜目镜1.25"SR4,H12.5, H20赤道仪(mm)型支架…

【算法系列 | 3】深入解析排序算法之——选择排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

[迁移学习]域自适应代码解析

一、概述 代码来自&#xff1a;https://github.com/jindongwang/transferlearning&#xff0c;可以前往github下载代码&#xff0c;本文涉及的代码的位置为&#xff1a;Code->DeepDA。理论基础可以参见&#xff1a;[迁移学习]域自适应 整体网络结构如下&#xff1a;可以视为…

TensorFlowLite 声音识别

开发 添加tensorflow的核心依赖 implementation org.tensorflow:tensorflow-lite-task-audio:0.4.0将训练模型放到main/assets文件夹下 在build.gradle中配置 因为打包时tflite文件可能会被压缩,所以需要配置如下 buildFeatures {viewBinding true}androidResources {noComp…

详解CSS中的flex布局

详解CSS中的flex布局 1、概念2、容器属性2.1 flex-direction2.2 flex-wrap2.3 flew-flow2.4 justify-content2.5 align-items2.6 align-content 3、元素属性3.1 order3.2 flex-grow3.3 flex-shrink3.4 flex-basis3.5 flex3.6 align-self 1、概念 弹性盒子&#xff08;display: …

JavaWeb笔记(四)

前端基础 **提醒&#xff1a;**还没有申请到IDEA专业版本授权的同学要抓紧了&#xff0c;很快就需要用到。 经过前面基础内容的学习&#xff0c;现在我们就可以正式地进入Web开发的学习当中啦~ 本章节会讲解前端基础内容&#xff08;如果已经学习过&#xff0c;可以直接跳到…

供应链安全

供应链安全 目录 文章目录 供应链安全目录本节实战可信任软件供应链概述构建镜像Dockerfile文件优化镜像漏洞扫描工具&#xff1a;Trivy检查YAML文件安全配置&#xff1a;kubesec准入控制器&#xff1a; Admission Webhook准入控制器&#xff1a; ImagePolicyWebhook关于我最后…

五年磨一剑——Sealos 云操作系统正式发布!

这是个宏伟的计划 这是一个宏伟的计划&#xff0c;漫长且有趣。 2018 年的某个夜晚&#xff0c;夜深人静&#xff0c;我挥舞键盘&#xff0c;敲下了 Sealos 的第一行代码。当时仓库命名为 “kubeinit”&#xff0c;后来觉得格局太小&#xff0c;我不可能只做一个安装 Kuberne…