完全背包+背包装满 总结

news2024/9/8 12:27:36

目录

1.背包恰好装满

(1)问题是什么

(2)问题的有效状态和无效状态

(3)问题的常考形式,以及如何去处理

1.值的大小

2.组合个数

3.排列个数

2.例题

A. Cut Ribbon

HDU1114 Piggy-Bank 


1.背包恰好装满

(1)问题是什么

背包恰好装满的最大价值可以拆分成两个子问题

1.背包能否背恰好装满

2.如果可以恰好装满,那么恰好装满的时候的最大价值为多少

(2)问题的有效状态和无效状态

对于这种问题,背包的有效状态指的是背包为空,或者是背包恰好装满

无效状态指的是背包装了东西,但是没有装满

!!!!!!!!结论:任何有效状态都是由有效状态推出来的,无效状态无法推出有效状态 

(3)问题的常考形式,以及如何去处理

1.值的大小

2.组合个数

3.排列个数

首先我们在这篇博客主要讨论的是值的大小,一般会有两种考向:

一个是容量为j的背包,最多能装多少物品

一个是容量为j的背包,最少能装多少物品 

(1)对于第一个来说

既然其有效状态是为了求最大值,我们就要将无效状态的值变为一个最小值,这样完全背包的代码,无效值就无法去影响有效值的计算了

(2)对于第二个来说

和第一个相反,将无效状态变为一个最大值,别的没有任何区别 

2.例题

A. Cut Ribbon

 

CF上一个div2的A题,那么必然就是一个简单的模版题了, 就是完全背包+判断背包装满是的最大的丝带数,然后就要用到我们的第一种情况了,让无效状态的值是一个int类型的最小值,然后正常去进行完全背包就可以直接拿下了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[5];
int dp[4005];

signed main()
{
	cin>>n;
	for(int i=1;i<=3;i++)
	{
		cin>>a[i];
	}
	memset(dp,-0x3f3f3f3f,sizeof(dp));//既然他想求最大值,那么我们就将非法状态设置为int类型的负无穷
	dp[0]=0;//长度为0,那肯定最大缎带数量为0;
	
	for(int i=1;i<=3;i++)
	{
		for(int j=a[i];j<=n;j++)
		{
			dp[j]=max(dp[j],dp[j-a[i]]+1);
		}
	}
	printf("%lld",dp[n]);
	return 0;
}

HDU1114 Piggy-Bank 

 

这个就相当于一个给我一个容量为f-e的背包,去判断这么个背包装满的时候,最少能装多少价值的物品,第二种情况,将无效状态设为int类型的最大值即可(我这边设置的是long long 类型的最大值,反正都是一个效果)

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define int long long
int t;
int e,f;
int n;
int w[505];
int p[505];
int dp[10005];//表示的是j公斤,所得到的最小价值为dp[j]
//因为要求最小金额,那么我们一上来给dp初始化为int最大值 
signed main() 
{
	cin>>t;
	while(t--)
	{
		cin>>e>>f;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>p[i]>>w[i];
		}
		memset(dp,0x3f3f3f3f3f3f3f3f,sizeof(dp));
		dp[0]=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=w[i];j<=f-e;j++)
			{
				dp[j]=min(dp[j],dp[j-w[i]]+p[i]);
			}
		}
		if(dp[f-e]!=0x3f3f3f3f3f3f3f3f)
		{
			printf("The minimum amount of money in the piggy-bank is %lld.\n",dp[f-e]);
		}
		if(dp[f-e]==0x3f3f3f3f3f3f3f3f)
		printf("This is impossible.");
	}
	return 0;
}

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

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

相关文章

OpenHarmony实战开发——网络组件axios可以在OpenHarmony上使用了

什么是axios 上古浏览器页面在向服务器请求数据时&#xff0c;因为返回的是整个页面的数据&#xff0c;页面都会强制刷新一下&#xff0c;这对于用户来讲并不是很友好。并且我们只是需要修改页面的部分数据&#xff0c;但是从服务器端发送的却是整个页面的数据&#xff0c;十分…

C++: 二叉搜索树及实现

目录 一、二叉搜索树的概念 二、二叉搜索树的操作 2.1插入 2.2删除 1.有左子树&#xff0c;无右子树 2.有右子树&#xff0c;无左子树 3.有左子树和右子树 三、二叉搜索树的实现 要点 前言&#xff1a;为了学习map和set&#xff0c;需要先学二叉搜索树作为铺垫。 一、…

计算机毕业设计 | SpringBoot招投标系统 任务发布网站(附源码)

1&#xff0c;绪论 在市场范围内&#xff0c;任务发布网站很受欢迎&#xff0c;有很多开发者以及其他领域的牛人&#xff0c;更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上&#xff0c;任务发布网站鱼龙混杂&#xff0c;用户需要找一个…

AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型

AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文介绍了 IP-Adapter&#xff0c;一种 高效地将预训练的图像到图像转换模型适应到新领域 的方法。它通过在预训练模型的 输入端 添加一个…

Python考试复习--day2

1.出租车计费 mile,waitmap(int,input().split(,)) if mile<3:money13wait*1 elif mile>3 and mile<15:money13(mile-3)*2.3wait*1 else:money1312*2.3(mile-15)*2.3*(10.5)wait*1 print({:.0f}.format(money)) 【知识点1】&#xff1a; map() 函数 【知识点1】&…

数字水印 | 离散余弦变换 DCT 基本原理及 Python 代码实现

目录 1 基本原理2 代码实现3 图像压缩 1 基本原理 参考博客&#xff1a;https://www.cnblogs.com/zxporz/p/16072580.html D C T \mathsf{DCT} DCT 全称为 D i s c r e t e C o s i n e T r a n s f o r m \mathsf{Discrete\ Cosine\ Transform} Discrete Cosine Transfo…

HTTPS证书——网站如何实现HTTPS访问?

实现网站HTTPS访问可以简化为以下四个基本步骤&#xff0c;确保过程既通俗易懂又条理清晰&#xff1a; 1. 申请SSL证书 - 目的&#xff1a;SSL证书是实现HTTPS加密的关键&#xff0c;它验证了网站的身份&#xff0c;并提供了加密数据所需的密钥。 - 操作&#xff1a;首先&…

面试手撕——使用两个线程交替打印1-100

记录一下使用两个线程交替打印1-100的操作: /*** description: 使用两个线程交替打印1-100* author: Jay* create: 2024-05-27 21:29**/ public class print_1_to_100 {static volatile int flag 1; //此处需要加关键字volatile保证变量之间的可见性&#xff0c;否则程序将会…

TS(TypeScript)中Array数组无法调出使用includes方法,显示红色警告

解决方法 打开tsconfig.json文件&#xff0c;添加"lib": ["es7", "dom"]即可。 如下图所示。

move base全解

0. 简介 之前我们专门有一节讲到了《move_base源码学习》。主要介绍了MoveBase基类中函数的大概意思以及调用的方式。move_base是ROS下关于机器人路径规划的中心枢纽。它通过订阅激光雷达、map地图、amcl的定位等数据&#xff0c;然后规划出全局和局部路径&#xff0c;再将路径…

数组-两个升序数组中位数

一、题目描述 二、解题思路 (一).基本思想&#xff1a; 如果列表总长度allsize( arr1.size()arr2.size() ) 为奇数时&#xff0c;中位数位置应该在两个列表排序后的第 allsize/2 位置处&#xff0c;如果allsize为偶数&#xff0c;中位数应该取 (allsize/2)-1 和 allsize/2 的…

python数据类型之列表

目录 1.创建列表 2.列表基础操作 常用操作 对列表元素顺序随机打乱 列表下标和切片 字符串分割为列表 列表位移 列表切片替换 3.列表内置方法 4.列表排序 简单排序 使用key参数按指定规则排序 二维列表排序 自定义排序规则函数 5.列表排序算法 选择排序 柱状图…

4-主窗口

4-主窗口 1、简介2 菜单栏、工具栏、状态栏2.1 菜单栏2.2 QAction2.3 工具栏2.4 状态栏 3 混合方式UI设计 1、简介 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏、多个工具栏、多个停靠控件、一个状态栏以及一个中心控件&#xff0c;是许多应用程序&…

宝塔部署前后端分离项目手册

文章目录 安装宝塔安装环境开始部署1. 前端Vue项目1.先本地启动前端项目&#xff08;记住端口号&#xff09;2.打包前端项目3.上传前端项目4.创建PHP站点5.安全里开放端口号6.测试前端 2. 后端boot项目1. 先在本地跑起来2.修改数据库的配置信息3. 项目打包4. nohup启动项目4.1 …

2024年必看!会声会影神器升级,让你的视频制作技能直线上升

在数字媒体内容呈现爆炸式增长的今天&#xff0c;无论是个人还是企业&#xff0c;都开始重视视频制作与编辑的质量。一款优秀的视频编辑软件&#xff0c;不仅需要具备强大的功能&#xff0c;更需要提供直观、高效的用户体验。在这样的背景下&#xff0c;会声会影2024应运而生&a…

《开发问题解决》Window下7z解压:cannot create symbolic link : 客户端没有所需的特权

问题描述&#xff1a; 今天使用7z来解压东西的是突然出现这个问题。 问题解决&#xff1a; download直接下载到c盘中&#xff0c;由于所在文件夹有权限限制。无法进行正常解压。 7.zip解压时使用管理员权限进行解压&#xff0c;解压时使用管理员权限。即如图 使用管理员权限重…

基于飞书机器人跨账号消息提醒

事情的起因是飞书中不同的账号不能同时登录&#xff0c;虽然可以在飞书的账号切换页面看到其他账号下是否有消息提醒&#xff08;小红点&#xff09;&#xff0c;但是无法实现提醒功能&#xff0c;很不优雅&#xff0c;因此本文尝试提出一种新的方式实现不同账号之间的提醒功能…

基于Go实现的分布式主键系统

基于Go实现的分布式主键系统 摘要 随着互联网的发展&#xff0c;微服务得到了快速的发展&#xff0c;在微服务架构下&#xff0c;分布式主键开始变得越来越重要。目前分布式主键的实现方式颇多&#xff0c;有基于数据库自增的、基于UUID的、基于Redis自增的、基于数据库号段的…

时空AI软件:地理信息与遥感领域的智慧引擎

在地理信息与遥感技术的广阔疆域&#xff0c;时空AI软件如同一颗璀璨新星&#xff0c;将时空信息与智能深度融合&#xff0c;驱动着地理信息分析、决策支持、环境监测、城市规划等领域的深刻变革。本文将深入剖析其技术核心、应用实例、未来趋势&#xff0c;探索时空AI软件如何…

OrangePi Kunpeng Pro 开发板测评及Python开发实测

一、背景 首先感谢 创新乐知通过CSDN 邀请本人&#xff0c;参与这次 评测活动。这块开发板是香橙派联合华为精心打造&#xff0c;具有超强算力的鲲鹏开发板。本人使用最多的还是树莓派系列的板子&#xff0c;国产板子特别是华为为核心的板子还是头一次使用&#xff0c;特别感兴…