算法:完全背包问题dp

文章目录

      • 一、完全背包问题的特征
      • 二、定义状态
      • 三、状态转移
      • 四、降维优化
      • 五、参考例题
        • 5.1、Acwing:3.完全背包问题
        • 5.2、Acwing:900. 整数划分

在这里插入图片描述

一、完全背包问题的特征

完全背包问题是动态规划中的一种经典问题,它的主要特征可以总结如下:

  1. 无限使用物品:与0-1背包问题不同,其每种物品只能使用一次,而完全背包问题允许每种物品被无限次选取。

  2. 背包容量限制:存在一个容量限制W,所有选取的物品总重量不能超过这个限制。

  3. 目标函数目标是在不超过背包容量的前提下,最大化背包内物品的总价值。

  4. 复杂度:完全背包问题的时间复杂度和空间复杂度取决于具体的实现方法,通常时间复杂度为O(NW),其中N是物品数量,W是背包容量。通过优化,空间复杂度可以降低到O(W)

二、定义状态

  • 定义dp[i][j]表示,考虑前i个物品且背包容量为j时的最大价值。

三、状态转移

  • dp[i][j]=max(dp[i-1][j],dp[i][j-weight[i]]+price[i])
  • 即背包容量为j时,考虑前i个物品的最大价值从两个方面转移而来:
    • dp[i-1][j]:不加入物品i时,容量为j的背包利益最大值。
    • dp[i][j-weight[i]]+price[i]:加入物品i时,容量为j的背包利益最大值。

我们需要特别注意这里和0-1背包的区别,
0-1背包:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+price[i]),因为0-1背包每个物品要么放要么不放,而完全背包问题每个物品可以放置多次,因此转移时是从考虑物品i的情况下转移的。

for(int j=weight[0];j<=V;++j)dp[0][j]=dp[0][j-weight[0]]+price[0];
for(int i=1;i<N;++i)
for(int j=weight[i];j<=V;++j)dp[i][j]=max(dp[i-1][j],dp[i][j-weight[i]]+price[i]);

四、降维优化

考虑到状态转移的时候,我们是一个物品一个物品考虑的,相当于二维数组中一行一行考虑的,当前状态只需要用到之前的状态,因此我们可以进行降维优化。将空间降低到一维:

    dp[0]=0;for(int i=0;i<N;++i){//考虑第i个物品for(int j=weight[i];j<=V;++j){dp[j]=max(dp[j],dp[j-weight[i]]+price[i]);}}

五、参考例题

5.1、Acwing:3.完全背包问题

模板题
3.完全背包问题

#include<bits/stdc++.h>
using namespace  std;
int main(void){ios_base::sync_with_stdio(false);cin.tie(0);int N,V;cin>>N>>V;vector<int> volume(N);vector<int> price(N);for(int i=0;i<N;++i){cin>>volume[i]>>price[i];}vector<int> dp(V+1);dp[0]=0;for(int i=0;i<N;++i){//考虑第i个物品for(int j=volume[i];j<=V;++j){dp[j]=max(dp[j],dp[j-volume[i]]+price[i]);}}cout<<dp[V];return 0;
}
5.2、Acwing:900. 整数划分

900.整数划分
整数划分问题可以转换成,完全背包问题。即:
对于体积为n的背包,有1~n ,n个物品,每个物品的体积为其编号大小,求体积为n的背包能被装满的不同物品放置种类数。
整数划分问题解析

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网需要做安全防护吗?

互联网需要做安全防护&#xff0c;因为网络攻击的风险随时存在。一旦遭受大规模攻击&#xff0c;企业很可能会受到严重影响&#xff0c;甚至会造成巨大的经济损失和品牌声誉受损。因此&#xff0c;建议企业在安全防护方面做好以下几点&#xff1a; 加强网络安全意识教育&#x…

Echarts折线图X轴坐标点显示不全问题解决方案

在前端开发中&#xff0c;Echarts是一个广泛使用的可视化库&#xff0c;它允许我们轻松创建各种复杂的图表&#xff0c;包括折线图、柱状图、饼图等。然而&#xff0c;在使用Echarts创建折线图时&#xff0c;有时会遇到X轴坐标点显示不全的问题。这不仅影响了图表的视觉效果&am…

基于机器学习的信用卡办卡意愿模型预测项目

基于机器学习的信用卡办卡意愿模型预测项目 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建…

小马识途营销顾问谈如何做好网络口碑营销?

俗话说酒香不怕巷子深&#xff0c;酒香自然有一定的优势&#xff0c;但小马识途营销顾问认为&#xff0c;面对众多的产品&#xff0c;稀有性并不那么容易。所以赢得自己的品牌口碑&#xff0c;获取客户的信任度&#xff0c;才能让企业在市场竞争中长期立于不败之地。具体如何赢…

Echarts多曲线数值与Y周刻度不符合、Echarts tooltip文字设置左对齐、Echarts折线图背景区间色自定义

Echarts多曲线数值与Y周刻度不符合: 问题描述&#xff1a; 在展示多曲线图表的时候&#xff0c;发现图表曲线数值与Y轴刻度对应不上 问题解决方式&#xff1a; 查看下Echarts的配置option中的seriess属性(多曲线的时候这个属性应该是一个数组)&#xff0c;然后查看数组中的每个…

STM32-寄存器映射

一、寄存器分类 寄存器是单片机内部一种特殊的内存&#xff0c;可以实现对单片机各个功能的控制 简单来说&#xff1a;寄存器就是单片机内部的控制机构 二、寄存器映射 1、寄存器是特殊的存储器&#xff0c;给寄存器地址命名的过程&#xff0c;就叫寄存器映射 寄存器描述…

欧冶云商绿色低碳供应链公共服务平台揭牌! 嘉兴印发 “链长+链主”制工作方案 | 产业互联网观察第171期

欧冶云商绿色低碳供应链公共服务平台正式揭牌! 4月3日下午&#xff0c;2024年绿色低碳供应链建设大会在中国宝武碳中和产业园召开&#xff0c;本次大会以“链聚绿色新动能&#xff0c;赋能新质生产力”为主题&#xff0c;大会举行了“绿色低碳供应链公共服务平台”启动仪式。 …

【御控物联】 JavaScript JSON结构转换(21):数组To对象——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

rsync实时同步(上行同步)

目录 一、实现实时同步 1. 定期同步的不足 2. 实时同步的优点 3. Linux内核的inotify机制 4. 发起端配置rsyncinotify 4.1 修改rsync源服务器配置文件 4.2 调整inotify内核参数 4.3 安装inotify-tools 4.4 在另一个终端编写触发式同步脚本 4.5 验证 二、使用rsync实现…

CentOS部署Apache Superset大数据可视化BI分析工具并实现无公网IP远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

PCA算法(Principal Component Analysis)揭秘

经典PCA算法 PCA算法的应用包括降维、有损数据压缩、特征抽取、数据可视化等。目前PCA算法有两个通用定义&#xff0c;能殊途同归&#xff0c;得到相同的结果。一方面&#xff0c;我们可以用正交投影来定义PCA&#xff0c;即将数据投影到更低维的线性子空间&#xff0c;也被称…

Datax,hbase与mysql数据相互同步

参考文章&#xff1a;datax mysql 和hbase的 相互导入 目录 0、软件版本说明 1、hbase数据同步至mysql 1.1、hbase数据 1.2、mysql数据 1.3、json脚本&#xff08;hbase2mysql.json&#xff09; 1.4、同步成功日志 2、mysql数据同步至hbase 1.1、hbase数据 1.2、mysql…