背包模型

背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包) 先等一下,字多预警,密集恐惧症慎入,喂,你,就是你,小板凳搬好了吗,站久了可是会腿酸的 无节操地王婆卖瓜一下,本文 深度好文 目录 先扯两句 0-1背包 其它类似的状态定义 1 2 小结 3 记忆化搜索 滚动数组(优化空间复杂度) 初始化 完全背包 递推关系 优化时间 滚动数组 简单有效的常数优化 多重背包 状态转移 转化为01背包问题 二进制优化 可... 阅读详情

1.0 1.0 1.0 01 01 01背包问题

每一个物品只能取 1 1 1 次 , C + + ,C++ ,C++ 模板 : : :

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,Arr[110];
int Dp[100010];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&Arr[i]);
	Dp[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=m;j>=Arr[i];j--)
			Dp[j]+=Dp[j-Arr[i]];
	printf("%d\n",Dp[m]);//m价值的排列个数
	return 0;
}

2.0 2.0 2.0 完全背包问题

每一个物品能取多次 , C + + ,C++ ,C++ 模板 : : :

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,Arr[110];
int Dp[100010];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&Arr[i]);
	Dp[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=Arr[i];j<=m;j++)
			Dp[j]+=Dp[j-Arr[i]];
	printf("%d\n",Dp[m]);//m价值的排列个数
	return 0;
}

3.0 3.0 3.0 多重背包问题

有 n n n 种物品 , , , 每个物体有 C n t i Cnt_i Cnti​ 个 , , , 每一个的价值是 A r r i , Arr_i, Arri​, 每一个的体积是 V o l i , Vol_i, Voli​, 问容量为 v v v 的背包能装下的价值总和最大的是多少 . . .

3.0.1 3.0.1 3.0.1 直接拆分法

把每个物品拆分成 C n t i Cnt_i Cnti​ 个物品 , , , 然后再跑一遍带价值的一遍背包 . . .

3.0.2 3.0.2 3.0.2 二进制拆分法

把每个物品分成多个不同的物品 , , , 每个物品的价值 , , , 体积分别为原来的 2 0 , 2 1 , 2 2 ⋯ 2 p 2^0,2^1,2^2\cdots 2^p 20,21,22⋯2p 倍 ( 2 0 + 2 1 + 2 2 ⋯ + 2 p < C n t i ) , (2^0+2^1+2^2\cdots+2^p<Cnt_i), (20+21+22⋯+2p<Cnti​), 余下来的物品在组成一个新物品 , , , 再跑一次带价值的一遍背包即可 . . .

3.0.3 3.0.3 3.0.3 单调队列优化

请见于单调队列优化处.

3.0.4 3.0.4 3.0.4 Acwing281

此题为多重背包问题的特殊情况 , , , 询问可行性 . . .

我们考虑贪心 , , , 动态规划最小消耗 . . .

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,Arr[101],Cnt[101],Dp[2][100011];
int main()
{
	while(~scanf("%d%d",&n,&m)&&(n||m))
	{
		for(int i=1;i<=n;i++)
			scanf("%d",&Arr[i]);
		for(int i=1;i<=n;i++)
			scanf("%d",&Cnt[i]);
		memset(Dp,-1,sizeof(Dp));
		Dp[0&1][0]=0;
		for(int i=1;i<=n;i++)
			for(int j=0;j<=m;j++)
				if(Dp[(i-1)&1][j]>=0)
					Dp[i&1][j]=Cnt[i];
				else if(j-Arr[i]>=0&&Dp[i&1][j-Arr[i]]>=1)
					Dp[i&1][j]=Dp[i&1][j-Arr[i]]-1;
		int ans=0;
		for(int j=1;j<=m;j++)
			if(Dp[n&1][j]>=0)ans++;
		printf("%d\n",ans);
	}
	return 0;
}
/*
若f[j]能被拼出

1.前i-1种硬币就能拼成面值j,即在第i阶段开始前,f[j]已经成为true。

2.使用了第i种硬币,即在第i阶段的递推过程中,发现f[j-a[i]]为true,从而使用一个i硬币,使f[j]变为true。

于是可以考虑一种贪心策略:设used[j]表示在第i阶段下将f[j]变为true至少需要使用多少枚第i种硬币。

为了满足我们的贪心策略,我们应该尽量多的使用第1种情况,也就是说在f[j-a[i]]为true时,若f[j]已经为true,就不进行DP转移,并令used[j]=0(我们并没有使用第i种硬币)仅当f[j-a[i]]为true而f[j]为false且已经使用的i硬币used[j-a[i]]<c[i]时,我们使用一个i硬币使f[j]变为true,used[j]=used[j-a[i]]+1;

作者:AsadaShino
链接:https://www.acwing.com/solution/content/11075/
*/

4.0 4.0 4.0 分组背包问题

有 n n n组物品 , , , 每一组至多选择一个物品 ( ( (也可以不选 ) , ), ), 每个物品的体积为 V o l i Vol_i Voli​和价值 A r r i , Arr_i, Arri​,问容量为 v v v的背包能装下的物品价值总和最大值 . . .

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,v,Dp[1100];
int Cnt[1100],Arr[1100][1100],Vol[1100][1100];
int main()
{
	memset(Dp,0xcf,sizeof(Dp));Dp[0]=0;
	scanf("%d%d",&n,&v);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&Cnt[i]);
		for(int j=1;j<=Cnt[i];j++)
			scanf("%d",&Vol[i][j]);
		for(int j=1;j<=Cnt[i];j++)
			scanf("%d",&Arr[i][j]);
	}
	for(int i=1;i<=n;i++)//阶段 
		for(int j=v;j>=0;j--)//状态 
			for(int k=1;k<=Cnt[i];k++)//决策 
				if(j>=Vol[i][k])
					Dp[j]=max(Dp[j],Dp[j-Vol[i][k]]+Arr[i][k]);
	printf("%d\n",Dp[v]);
	return 0;
}
动态规划之二维费用的背包模型 阅读详情

相关推荐

动态规划之多重背包模型

动态规划之多重背包模型

weixin_56265979的博客 1637

常用背包模型

背包

m0_72747430的博客 515

从零到一:嵌入式车载通信中间件VSOMEIP的跨平台构建之旅

本文详细介绍了嵌入式车载通信中间件VSOMEIP的跨平台构建过程,重点解析了交叉编译环境配置、Boost库编译、VSOMEIP定制化编译等关键技术环节。通过实战案例展示了在ARM架构嵌入式设备上的部署与调试方法,为开发者提供了一套完整的VSOMEIP嵌入式应用解决方案。

lilh34434的博客 197

背包问题模型整理

背包问题可以视为组合dp,而最长上升子序列问题视为线性dp(区间dp),它们的区别在于当前位置的决策跟前面具体某个的值有没有关系,或者说,当前位置的选与不选与已经确定的序列的最后一个位置有没有关系,如果有关系,那么就是线性dp,需要以i作为结尾,如果没关系就是组合dp,前i个笼统考虑即可。

m0_74120503的博客 2696

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1544

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1309

树形背包思考模型

树形背包常用思考模型 模型一 首先对于每个节点我们在dfs中dp转移时可以想象成一个分组背包,每次新遍历一个子树就可以想象成一个分组背包的下一组,转移时利用之前的背包状态进行转移,如果觉得这个模型比较难理解可以看下面的模型二 模型二 首先对于每次新遍历一个结点我们都可以想象成是在给这个结点拼接一颗子树如下图 解释:圆点为树的结点,三角形为一颗子树,线段为边,箭头是拼接方向。蓝色为之前计算好的状态的树,红色为即将拼接上去的一颗子树(这颗子树在dfs时计算好了所有状态) 模型一与模型二的联系 回到模型

hao_6_6的博客 531

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 367

动态规划---常用的背包模型(从原理到优化详细讲解)

动态规划---常用的背包模型(从原理到优化详细讲解)

qq_68734252的博客 2049

华为od 面试八股文_数据库_01_含答案

华为od 面试八股文_数据库_01_含答案

MISAYAONE的博客 2167

基于YOLOv8的视频监控违规停车智能识别系统与应用研究

通过这个毕设,你已经从数据准备、模型训练到界面开发,完整走了一遍深度学习项目的流程。把多个停车场的监控数据整合起来,做一个区域级的停车管理平台;加入车牌识别功能,直接定位到违规车辆的车主;试试把YOLO模型再优化一下,让它在手机端也能运行,实现移动巡检。相信我,按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出亮点,让答辩老师眼前一亮。要是过程中遇到什么问题,随时可以再琢磨琢磨,或者找我聊聊,咱们一起把这个毕设做成精品。

LXY_LOVE36的博客 118

【算法】01背包模型

目录题目01背包相关要素1. 背包2. 对于物品i思路1. dp数组模型2. 递推公式(难点):3. dp数组初始化值:dp[i][0] dp[0][j]1. dp[i][0] = 02. dp[0][j]4. 确定遍历顺序:2个维度:物品和背包容量逻辑图代码实现 题目 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i], 得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 01背包相关要素 背包容量w、物品体积weight[i]、物体

weixin_45325628的博客 909

【国产MCU】-CH32V307-通用定时器(GPTM)-输入捕获模式测量脉冲

CH32V307的通用定时器模块包含一个16 位可自动重装的定时器(TIM2、TIM3、TIM4和TIM5),用于测量脉冲宽度或者产生特定频率的脉冲、PWM波等。可用于自动化控制、电源等领域。 输入捕获是通用定时器功能之一,一般用于测量频率和测量脉冲宽度。本文将详细介绍如何通用定时器的输入捕获功能。

视觉与物联智能 2814

【背包九讲】背包模型的板子

纯记忆

qq_35684989的博客 315

Open3D 计算点云配准的旋转和平移误差

通过计算旋转误差和平移误差来量化配准结果与真实变换之间的偏差。

点云侠的博客 251

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

动态规划DP 背包模型 概览

本文主要提供寻找各类背包问题的链接,便于检索。

fcc13461862452的博客 308

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

动态规划二:背包模型

动态规划设计方法求解原理常见递推关系式线性DP超级楼梯数字三角形最长公共子序列最长上升子序列最大子段和区间DP回文括号匹配猴子派对乘法难题树形DP别墅派对战略游戏工人请愿书完美的服务背包类树形DP苹果树二次扫描于换根最远距离数位DP不吉利的数字定时炸弹Round Numbers计数问题数字权值状态压缩DP旅行商问题旅行商变形1旅行商变形2玉米田炮兵阵地马车旅行插头DP铺砖方格取数多回路连通性问题单回路连连通性问题单通路连连通性问题其他DP有向图最短路径最长递增子序列信封嵌套最长回文子序列扔玻璃球戳气球编辑.

Debroon 1060

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

背包DP模型

01背包DP

jyyyyx的算法之旅 110

深入学习C++:背包动规的基础模型

本文介绍了动态规划中的经典背包问题及其解法。主要包含五种类型:1)0-1背包(物品只能选一次),使用二维状态转移和一维空间优化;2)完全背包(物品无限选),需正序遍历;3)多重背包(物品有限数量),采用二进制拆分优化;4)分组背包(每组选一个物品);5)变种问题如二维费用背包。每种类型都给出了状态定义、转移方程及实现代码,并指出解题关键点在于正确理解问题类型、定义状态和优化空间。

善良的小乔的博客 931

背包模型——AcWing 423. 采药

背包模型是一种常见的算法问题模型,它主要涉及将一些物品放入一个容量有限的背包中,以达到某种最优目标,如最大化价值或最小化重量等。

u014114223的博客 2508

完全背包模型

完全背包的模型如下: 给定N个物品,其中第i个物品的体积Vi,价值为Wi,并且有无数个。有一容积为M的背包,要求选择一些物品放入背包,使得物品总体积不超过M的前提下,物品的价值总和最大。 输入样例: 10 4 2 1 3 3 4 5 7 9 输出样例 12 使用传统的二维线性DP做法: F[i,j]表示从前i中物品中选出了总体积为j的物品放入背包,物品的最大价值和。 只要拿一个物品,一种情况是不...

hwdn3000的博客 306

背包模型(入门)

本文介绍了三种背包问题的动态规划解法:01背包、完全背包和多重背包。01背包通过二维状态转移方程求解,可优化为一维数组;完全背包在01背包基础上允许无限取用物品,状态转移方程略有不同;多重背包则将物品数量视为限制条件,可通过二进制优化降低复杂度。每种方法都给出了对应的代码实现,适用于不同范围的输入数据。

weixin_44319729的博客 1344

背包模型题目集合

文章目录背包模型01背包AcWing 423. 采药AcWing 1024. 装箱问题Luogu 2925 干草出售Proud Merchants完全背包P1616 疯狂的采药P1853 投资的最大效益Piggy-Bank多重背包Luogu P1776 宝物筛选HDU 1059 Dividing混合背包P1833 樱花分组背包AreYouBusy 背包模型 01背包 AcWing 423. 采药 思路: 裸的01背包问题,在本题中我们将采药时间当作背包容量限制, dp[i][j]表示前i个草药用了j个时间的

qq_35975367的博客 521

背包问题模型总结

背包模型总结汇总。

涛涛的个人博客 4660

算法学习系列(五十五):背包模型(三)

今天介绍的是背包模型,还是以题目的形式来介绍的。主要讲了背包问题求方案,就是由最优方案递推回去即可。还有就是一些比较经典的背包问题,其实明显能感觉到其实背包问题拿暴搜来做也是可以的,因为有些问题就是在中间夹杂着暴力枚举所有方案的思想,再加上数据范围小的,就可以拿暴搜来做。还有图论问题,求方案就是求一个拓扑序的一个过程,只不过要根据一些值来确定其是否存在入度,然后找方案,然后感觉这些东西一下子活起来了,题做得多了就会有这种感觉,继续加油吧!

weixin_60033897的博客 1280
上一篇: 二分图匹配的可行边和必须边
下一篇: 动态规划的优化
DarksideCoder
博客等级 码龄7年 34粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值