完全背包问题

题目链接

题意:在01背包的基础上多了每个物品都可以无限取的条件

思路:首先考虑在01背包的基础上的暴力枚举,我们可以在枚举前i件物品最多拿j的容量时再遍历当前物品拿的数量

贴一个暴力tle代码:

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define INF 0x3f3f3f3f
#define pb push_back
#define int long long
#define Mirai ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> pii;
const int N=1010;
int dp[N][N];
int n,m,v,w;
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++)//枚举拿前i件物品{cin>>v>>w;for(int j=0;j<=m;j++)//枚举最大容量{for(int k=0;k*v<=j;k++)//枚举每一个物品拿多少个{dp[i][j]=max(dp[i][j],dp[i-1][j-k*v]+k*w);//此处有k=0的情况,dp[i][j]会首先等于dp[i-1][j]}}}cout<<dp[n][m]<<endl;
}
signed main()
{Mirai;int T=1;//cin>>T;while(T--){solve();}
}

dp[i][j]=max(dp[i-1][j],dp[i-1][j-v]+w,dp[i-1][j-2*v]+2*w,...)

dp[i][j-v]=max(dp[i-1][j-v],dp[i-1][j-2*v]+w,dp[i-1][j-3*v]+2*w,...)

所以不难发现dp[i][j]中取max的第二项之后的部分都可以转化为dp[i][j-v]+w

所以可得状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i][j-v]+w);

而此时我们同样发现每一层的状态只与i-1层的状态有关,所以仍然可以用01背包的降维优化方式,注意此时需要的状态是更新之后j的左值,所以需要从左往右遍历,而注意如果当前容量不足以装下当前物品,仍然是不需要更新的,所以枚举范围为v[i]~m

ac代码:

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define INF 0x3f3f3f3f
#define pb push_back
#define int long long
#define Mirai ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> pii;
const int N=1010;
int n,m,v,w;
int dp[N];
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++){cin>>v>>w;for(int j=v;j<=m;j++){dp[j]=max(dp[j],dp[j-v]+w);}}cout<<dp[m]<<endl;
}
signed main()
{Mirai;int T=1;//cin>>T;while(T--){solve();}
}

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

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

相关文章

分布式电网动态电压恢复器模拟装置电子设计大赛

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;85电网 获取完整论文报告结构框图工程源文件 摘要&#xff1a;本装置采用DC-AC及AC-DC-AC双重结构&#xff0c;前级采用功率因数校正&#xff08;PFC&#xff09;电路完成AC-DC变换&#xff0c;改善输入端电网电能质量。后…

靶形数独

题目描述 小城和小华都是热爱数学的好学生&#xff0c;最近&#xff0c;他们不约而同地迷上了数独游戏&#xff0c;好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了&#xff0c;于是他们向 Z 博士请教&#xff0c;Z 博士拿出了他最近发明的“靶形数独”&am…

YOLOv5入门

模型检测 关键参数 weights:训练好的模型文件 source: 检测的目标&#xff0c;可以是单张图片、文件夹、屏幕或者摄像头等 conf-thres: 置信度闯值&#xff0c;越低框越多&#xff0c;越高框越少 iou-thres: IOU闻值&#xff0c;越低框越少&#xff0c;越少框越多 torch.hu…

opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()

在进行均值滤波和方框滤波时&#xff0c;其邻域内每个像素的权重是相等的。在高斯滤波中&#xff0c;会将中心点的权重值加大&#xff0c;远离中心点的权重值减小&#xff0c;在此基础上计算邻域内各个像素值不同权重 的和。 基本原理 在高斯滤波中&#xff0c;卷积核中的值不…

阶段总结(linux基础)

目录 一、初始linux系统 二、基本操作命令 三、目录结构 四、文件及目录管理命令 查看文件内容 创建文件 五、用户与组管理 六、文件权限与压缩管理 七、磁盘管理 八、系统程序与进程管理 管理机制 文件系统损坏 grub引导故障 磁盘资源耗尽 程序与进程的区别 查…

layui之layer弹出层的icon数字及效果展示

layer的icon样式 icon如果在信息提示弹出层值(type为0)可以传入0-6&#xff0c;icon与图标对应关系如下&#xff1a; 如果是加载层&#xff08;type为3&#xff09;可以传入0-2&#xff0c;icon与图标对应关系如下&#xff1a;

【Java】批量生成条码

批量生成PDF条码 效果图&#xff1a; //调用下方接口注意编码格式if(CollectionUtil.isNotEmpty(productExList)){String exportFileName URLEncoder.encode("商品条码", "UTF-8") DateUtil.format(new Date(), "yyyyMMddHHmmss");response.…

“科创中国”青百会轮值主席吴甜:以大语言模型为代表的AI将引发产业变革

8月1日&#xff0c;“科创中国”青年百人会&#xff08;后文简称青百会&#xff09;联合百度举办“青创汇”高端对话&#xff0c;围绕人工智能技术创新与产业发展交流研讨&#xff0c;同时正式成立“科创中国”青年百人会女性工作委员会。该委员会将鼓励更多女性投身科技创新事…

AP2400 LED汽车摩灯照明电源驱动 过EMC DC-DC降压恒流IC

产品特点 宽输入电压范围&#xff1a;5V&#xff5e;100V 可设定电流范围&#xff1a;10mA&#xff5e;6000mA 固定工作频率&#xff1a;150KHZ 内置抖频电路&#xff0c;降低对其他设备的 EMI干扰 平均电流模式采样&#xff0c;恒流精度更高 0-100%占空比控制&#xff0…

快速制作美容行业预约小程序

随着科技的不断进步&#xff0c;移动互联网的快速发展&#xff0c;小程序成为了很多行业迅速发展的利器。对于美容行业来说&#xff0c;一款美容预约小程序不仅可以方便用户进行预约&#xff0c;还可以提升美容店铺的服务质量和管理效率。下面&#xff0c;我们来介绍一下如何快…

Unreal Engine 各种编译运行模式的区别和应用场景

DebugGame&#xff1a; DebugGame模式用于在开发过程中进行调试。在这个模式下&#xff0c;项目会以调试模式编译&#xff0c;并包含调试符号(debug symbols)。这样&#xff0c;你可以在游戏中设置断点、查看变量的值以及进行代码调试。但由于包含调试符号&#xff0c;生成的可…

【力扣】21. 合并两个有序链表 <链表指针>

【力扣】21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;…