完全背包问题的解决方法______闫氏 DP 分析法

news2025/7/21 14:04:15

完全背包问题的解决方法:

闫氏   D P \ DP  DP 分析法:
通过集合划分,我们可以得到第   i \ i  i 个物品有两种状态:
 1.选   1 − T \ 1 - T  1T 个,最优解为前   i − 1 \ i− 1  i1 个物品的所有选择中,还能选取当前   k \ k  k 个第   i \ i  i 个物品的最大价值加上   k \ k  k 个第   i \ i  i 个物品本身的价值,即
  d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i − 1 ] [ j − k ∗ v [ i ] ] + k ∗ w [ i ] ) , ( 1 ≤ k ≤ T ) \ dp[ i ][ j ]= max( dp[ i][ j], dp[ i− 1][ j− k∗ v[i]]+k∗w[i]),(1≤k≤T)  dp[i][j]=max(dp[i][j],dp[i1][jkv[i]]+kw[i]),(1kT)
 2.不选,最优解为前   i − 1 \ i−1  i1个物品的所有选择中的最大价值,即   d p [ i ] [ j ] = d p [ i − 1 ] [ j ] \ dp[i][j]=dp[i−1][j]  dp[i][j]=dp[i1][j]
若使用枚举的方式来选取   1 − k \ 1−k  1k个物品 i的情况,会超时,故需分析当前的状态转移方程能否被优化。
我们令该朴素转移方程为 A式:
  d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − v ] + w , d p [ i − 1 ] [ j − 2 v ] + 2 w , ⋯ , d p [ i − 1 ] [ j − k v ] + k w ) \ dp[i][j]=max(dp[i−1][j],dp[i−1][j−v]+w,dp[i−1][j−2v]+2w,⋯,dp[i−1][j−kv]+kw)  dp[i][j]=max(dp[i1][j],dp[i1][jv]+w,dp[i1][j2v]+2w,,dp[i1][jkv]+kw)
将左式的   j \ j  j替换成   j − v \ j−v  jv后,得到 B式:
  d p [ i ] [ j − v ] = m a x ( d p [ i − 1 ] [ j − v ] , d p [ i − 1 ] [ j − 2 v ] + w , ⋯ , d p [ i − 1 ] [ j − k v ] + ( k − 1 ) w ) \ dp[i][j−v]=max(dp[i−1][j−v],dp[i−1][j−2v]+w,⋯,dp[i−1][j−kv]+(k−1)w)  dp[i][jv]=max(dp[i1][jv],dp[i1][j2v]+w,,dp[i1][jkv]+(k1)w)
仔细观察可以发现,A式从第二项开始与 B 式很相似,两者之间的差异仅为一个 w。
因此,将 A式右边第二项开始替换成 B 式加上一个 w 后,可得 C式:
  d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − v ] + w ) \ dp[i][j]=max(dp[i−1][j],dp[i][j−v]+w)  dp[i][j]=max(dp[i1][j],dp[i][jv]+w)

在这里插入图片描述3. 完全背包问题

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;

int n, m;
int v[N], w[N];
int f[N][N];//表示从前i个物品中选,总体积不超过j的方案的集合

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];

    for (int i = 1; i <= n; i ++ )//物品从第1件开始
    {
        for (int j = 0; j <= m; j ++ )//空间从0开始
        {
            f[i][j] = f[i-1][j];
            if( j >= v [i] )
            {
                f[i][j] = max(f[i-1][j], f[i][j - v[i]] + w[i]);//公式推导出来的
            }
        }
    }

    cout << f[n][m] << endl;
    return 0;
}

改成一维,如下:

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;

int n, m;
int v[N], w[N];
int f[N];//不超过总体积j的方案的集合

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];

    for (int i = 1; i <= n; i ++ ){
        for (int j = v[i]; j <= m; j ++ ){
        		//f[j] = f[j];  等式右边的f[j]表示 : 未更新前的,前i个物品中选,总体积不超过j的方案的集合 ; 等式左边表示更新后的 前i个物品中选,总体积不超过j的方案的集合。所以,与f[i][j] = f[i-1][j];等效
            f[j] = max(f[j], f[j - v[i]] + w[i]);
            //cout<<f[j]<<' ';
        }
        //cout<<endl;
    }            
    cout << f[m] << endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模式识别与机器学习 第一章:绪论

一、基础概念 样本: 所研究对象的单个个体、实例。样本集: 若干样本的集合。类或类别: 在所有样本上定义的一个子集&#xff0c;处于同一类的样本具有相似的性质&#xff0c;即具有相同的模式。特征: 用于表征样本的观测&#xff0c;也称属性。通常是数值表示的某些量化特征&a…

基于帧间差分法的视频目标检测研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、帧间差分算法原理✳️ 三、视频目标检测系统✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 随着科技的发展、社会的进步、人民生活水平的提高&#xff0c;团体和个人的安防意识都在不断增强&#xff0c;视频监控系统也就得到了…

深入浅出 C++ 11 右值引用

彻底搞清楚&#xff1a;右值引用/移动语义/拷贝省略/通用引用/完美转发 —— 以最短的篇幅&#xff0c;介绍常见误解&#xff08;什么时候要用 move&#xff1f;什么时候不能 move&#xff1f;为什么 move 失败&#xff1f;&#xff09;和基础知识&#xff08;为什么右值引用变…

魔性洗脑神曲掀起模仿热潮,品牌为何热衷“打歌”?

【潮汐商业评论/ 原创】 抖音、快手、B站等社交媒介是品牌推广绕不开的阵地&#xff0c;围绕这些平台&#xff0c;一些品牌在“打歌”路上越走越远——通过几何级增长的播放量&#xff0c;使品牌定制曲迅速蹿红&#xff0c;成为“神曲”。这些定制曲仿佛自带魔力&#xff0c;不…

甘露糖-聚乙二醇-叠氮,mannose-PEG-N3,叠氮-PEG-甘露糖

甘露糖-聚乙二醇-叠氮&#xff0c;mannose-PEG-N3&#xff0c;叠氮-PEG-甘露糖 叠氮化合物是一类含有三个氮相连结构的化合物&#xff0c;一般用RN3表示。叠氮化合物是电子传递系统的抑制剂&#xff0c;能与细胞色素形成配位化合物&#xff0c;阻止细胞色素氧化酶氧化型a3组分…

【附源码】Python计算机毕业设计双笙映画

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

四则运算Java版

数据结构之栈的应用之四则运算_文丑颜不良啊的博客-CSDN博客 之前有写过一篇关于栈的应用之四则运算的文章&#xff0c;是用 C 写的&#xff0c;涉及到一些指针的操作&#xff0c;同时&#xff0c;那篇文章有一个致命的错误&#xff0c;就是只支持 10 以内的混合运算&#xff…

STM32微控制 -STM32命名规则-STM32寄存器缩写列表-STM32存储器和总线架构

STM32使用说明第一篇【1】STM32微控制器【2】STM32命名规则【3】STM32寄存器缩写列表【4】STM32存储器和总线架构【1】STM32微控制器 STM32是一个微控制器产品系列的总称&#xff0c;目前这个系列中已经包含了多个子系列&#xff0c;分别是&#xff1a; 【1】STM32小容量产品 【…

操作系统基础教程——第五章课后作业答案

1.思考题 &#xff08;3&#xff09;什么是文件的逻辑结构&#xff1f;它有哪几种组织方式? 文件的逻辑结构&#xff08;逻辑文件&#xff09;&#xff1a;独立于物理环境的&#xff0c;用户概念中的抽象信息组织方式&#xff0c;用户能观察到的&#xff0c;并加以处理的数据…

[datawhale202211]跨模态神经搜索实践:跨模态模型

结论速递 本次任务首先了解了CLIP模型及其原理&#xff0c;CLIP模型将图像标签替换为图像的文本描述信息&#xff0c;来监督视觉任务的训练&#xff0c;引入了语义匹配实现下游任务的zero-shot。 多模态和跨模态可能是未来模型的发展方向&#xff0c;多模态尝试结合不同信息表…

数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(三)

文章目录4. 有限同步状态机4.1 编码4.2 有限状态机的写法4.3 举例4.3.1 用Verilog HDL 设计顺序脉冲发生器4.3.2 设计-个自动售报机报纸价钱为八角&#xff0c;纸币有 1角、2 角5 角、一元。该自动售报机不考虑投币为大额面值等特殊情况4. 有限同步状态机 &#xff01;&#xf…

『Java』类和对象

文章目录一、面向对象的初步认识&#x1f333;1、什么是面向对象&#x1f333;2、面向对象与面向过程&#x1f351;&#xff08;1&#xff09;洗衣服&#x1f351;&#xff08;2&#xff09;大象装冰箱汽车拼装二、类定义和使用&#x1f333;1、简单认识类&#x1f333;2、类的…

网络安全重点知识

单选&#xff08;抽20个&#xff09;、判断&#xff08;抽5个&#xff09; 第二章&#xff1a; 第三章&#xff1a; 第四章&#xff1a; 第五章&#xff1a; 第六章&#xff1a; 第八章&#xff1a; 填空&#xff08;抽3个&#xff09; 1、网络安全&#xff1a; 是在网络各个…

【附源码】Python计算机毕业设计税务综合信息平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

jquery基础--学习笔记

jQuery选择器 元素、Class、id选择器 属性选择器 注意&#xff1a;&#xff01;如果不指定标签&#xff0c;会输出所有的html标签不满足的元素 如何指定&#xff1f;可以用之前的元素、标签或者id选择器 层级选择器 上面图片写错了&#xff0c;box应该是div&#xff0c;看例子…

【微信小程序】数据绑定

&#x1f3c6;今日学习目标&#xff1a;第十一期——数据绑定 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;25分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目录前言实现数据绑定初始化数据…

[附源码]java毕业设计农村留守儿童帮扶系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Flink cdc 2.3.0 日前发布,支持众多新特性

新连接器 2.3.0 新增了 DB2 CDC 连接器 增量快照迎来新的连接器成员 2.3.0 版本MongoDB CDC&#xff0c;Oracle CDC 两大连接器均支持了增量快照&#xff0c;实现无锁读取并发读取断点续传 优化 2.3.0 版本 MySQL CDC 连接器性能和稳定性大幅提升 Flink 支持 2.3.0 版本…

11月19日绿健简报,星期六,农历十月廿六

11月19日绿健简报&#xff0c;星期六&#xff0c;农历十月廿六1. 文旅部&#xff1a;不随意关停娱乐场所&#xff0c;无疫情发生地原则上不限制大型经营性演出观众人数。2. 人社部等五部门&#xff1a;企业不得以年龄为由“一刀切”清退大龄农民工。3. 英国政府以国家安全为由&…

Java 枚举(Enum)使用

文章目录枚举引入enum关键字实现枚举enum关键字实现枚举注意事项enum常用方法一览表enum课堂练习enum实现接口枚举引入 创建Season类, 实例化春夏秋冬四个实例 Season对象有如下特点 1.季节的值是有限的几个值(spring, summer, autumn, winter) 2.只读&#xff0c;不需要修改…