背包问题(一)

一.P3985 不开心的金明(01背包变式)

 

 

解析:

 一开始没有看数据范围,直接当01背包直接写了,结果最后4个测试点RE,一看到数据范围就老实了,1e9的数据,数组直接炸,所以不能直接使用一维的01背包.看了一下题解,部分人是通过极差对数据进行分类,按照300进行分开,使用贪心和dp一起做.

我认为有些麻烦了,我们之所以不能通过一维01背包来实现就是因为数据范围太大,但如果我们可以将数据范围减少,那我们依然可以通过01背包实现.因为极差最大为3,我们只要将所有数据都减去其中的最小值,那么物品的价格的范围就被缩到0~3了,为了方便使用,我们可以都加上1,让范围从一开始,从而最后总的价格也就被控制在1000以内.但由于,我们是把所有物品的价格都减去最小值,那我们在尝试放入背包时就要再在加上判断,以此我们要在加上一维,再在dp数组中多加一维,记录一共选了几个.dp[i][j]表示我选的修改后的物品的选了i个,价格为j.

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 1000005
ll dp[1005][1005], w[N], v[N];
ll a, b, c, n, m, t;
ll ans, sum, num, minn=1e9+7, maxx;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> w[i] >> v[i];
		minn = min(minn, w[i]);
	}
	minn--;
	sum = 0;
	for (int i = 1; i <= n; i++) {
		w[i] -= minn;
		sum += w[i];
	}
	for (int i = 1; i <= n; i++) {
		for (int j = sum; j >= w[i]; j--) {
			for (int k = n; k >= 1; k--) {
				if (k * minn + j <= m)
					dp[k][j] = max(dp[k][j], dp[k-1][j - w[i]] + v[i]);
			}
		}
	}
	ans = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= sum; j++) {
			ans = max(ans, dp[i][j]);
		}
	}
	cout << ans << endl;
}

 

二.P5662 [CSP-J2019] 纪念品(完全背包变形)

 

 

解析:

这道题的关键在于如何将抽象的问题转换成我们熟悉的模型:

这是一道完全背包的题,我们进行 𝑡−1 轮完全背包:

把今天手里的钱当做背包的容量

把商品今天的价格当成它的消耗,

把商品明天的价格当做它的价值

每一天结束后把总钱数加上今天赚的钱,直接写背包模板即可。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 1000005
ll dp[N], w[N], v[N], p[105][105];
ll a, b, c, n, m, t;
ll ans, sum, num, minn = 1e9 + 7, maxx;
int main()
{
	cin >> t >> n >> m;
	for (int i = 1; i <= t; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> p[i][j];
		}
	}
	for (int i = 1; i < t; i++) {
		memset(dp, 0, sizeof(dp));
		for (int j = 1; j <= n; j++) {
			for (int k = p[i][j]; k <= m; k++) {
				dp[k] = max(dp[k], dp[k - p[i][j]] + p[i + 1][j] - p[i][j]);
			}
		}
		m += dp[m];
	}
	cout << m << endl;
	return 0;
}

P5020 [NOIP2018 提高组] 货币系统(完全背包变形)

解析:

将a数组从小到大排序,最小的数必须要选,然后利用完全背包的思想,从𝑎𝑖ai​到最大值筛选一遍,将可以组成的打上标记,在判断后面的数字时,如果已经被标记过了,就不再选,没有被标记过就标记一下,再筛选一次数(即一次完全背包)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 1000005
ll dp[N], w[N], v[N], vis[N];
ll a, b, c, n, m, t;
ll ans, sum, num, minn = 1e9 + 7, maxx = 0;
int main()
{
	cin >> t;
	while (t--)
	{
		cin >> n;
		for (int i = 1; i <= n; i++) {
			cin >> w[i];
			maxx = max(maxx, w[i]);
		}
		memset(vis, 0, sizeof(vis));
		sort(w + 1, w + 1 + n);
		ans = 0;
		for (int i = 1; i <= n; i++) {
			if (vis[w[i]])
				continue;
			ans++;
			vis[w[i]] = 1;
			for (int j = w[i]; j <= maxx; j++) {
				vis[j] = max(vis[j], vis[j - w[i]]);
			}
		}
		cout << ans << endl;
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7_1_SVPWM概述

1、SPWM 正弦脉宽调制法&#xff08;SPWM&#xff09;是将每一正弦周期内的多个脉冲作自然或规则的宽度调制&#xff0c;使其依次调制出相当于正弦函数值的相位角和面积等效于正弦波的脉冲序列&#xff0c;形成等幅不等宽的正弦化电流输出。 通过调整占空比使等效电流近似为正弦…

DT浏览器很好用

DT浏览器是一款简单的浏览器&#xff0c;又是强大的浏览器&#xff0c;界面简洁大方&#xff0c;软件使用流畅。DT浏览器的网址收藏&#xff0c;人工智能写作&#xff0c;书法笔记等功能与众不同。DT浏览器的图文识别功能和笔记本搭配使用&#xff0c;可以对内容编辑修改和保存…

时序模型综述论文

时序模型综述论文&#xff1a; A Survey of Time Series Foundation Models: Generalizing Time Series Representation with Large Language Model

c++ String

1.string类 还记得我们数据结构学的串吗&#xff0c;现在在c中&#xff0c;我们有了c提供的标准库&#xff0c;它是一个写好的类&#xff0c;非常方便使用 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作strin…

学习笔记——动态路由——OSPF工作原理(SPF算法)

3、SPF算法 SPF算法(最短路径优先算法&#xff0c;也称Dijkstra算法)由荷兰科学家狄克斯特拉于1959年提出的。 SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离&#xff0c;每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图&#xff0c;该…

MySQL:MySQL总结

文章目录 MySQL思维导图基础实际在 Innodb 存储引擎中&#xff0c;会用一个特殊的记录来标识最后一条记录&#xff0c;该特殊的记录的名字叫 supremum pseudo-record &#xff0c;所以扫描第二行的时候&#xff0c;也就扫描到了这个特殊记录的时候&#xff0c;会对该主键索引加…

基于Bootstrap Blazor开源的.NET通用后台权限管理系统

前言 今天大姚给大家分享一个基于Bootstrap Blazor开源的.NET通用后台权限管理系统&#xff0c;后台管理页面兼容所有主流浏览器&#xff0c;完全响应式布局&#xff08;支持电脑、平板、手机等所有主流设备&#xff09;&#xff0c;可切换至 Blazor 多 Tabs 模式&#xff0c;…

JVM原理(十六):JVM虚拟机类型擦除与泛型发展

1. 泛型 泛型的本质是参数化类型或者参数化多态的应用&#xff0c;即可以将操作的数据类型指定为方法签名中的一种特殊参数&#xff0c;这种参数类型能够用在类、接口和方法的创建中&#xff0c;分别构成泛型类、泛型接口和泛型方法。 泛型让程序员能够以针对泛化的数据类型编…

手动访问mongo和ES插入和查询

1、手动访问mongo 1.1、mongo连接数据库 1.2、mongo插入和查询 db.hmf_test.insert( { "aoeId": "1", "aoeAes": "吴秀梅", "aoeSm4": "北京xx网络技术有限公司.", "aoeSm4_a": "…

【BUUCTF-PWN】4-ciscn_2019_n_1

参考&#xff1a;BUUCTF-ciscn_2019_n_1 - 纸鸢asahi - 博客园 (cnblogs.com) buuctf 刷题记录_PWN ciscn_2019_n_1 - MuRKuo - 博客园 (cnblogs.com) 从题海中入门&#xff08;四&#xff09;ciscn_2019_n_1 - FreeBuf网络安全行业门户 ciscn_2019_n_1 ——两种解法_0x4134800…

抗震支吊架安装

抗震支吊架系统安装指导 设计要求&#xff1a; 本工程采用抗震支吊架系统&#xff0c;请根据深化设计提供的图纸及安装材料表等进行安装。 材料要求&#xff1a; 符合 CJ/T476-2015《建筑机电设备抗震支吊架通用技术条件》及 CECS 420:2015《抗震支吊架安装及验收规程》 槽…

Go语言--延迟调用defer、获取命令行参数、局部变量以及全局变量

延迟调用defer 关键字 defer 用于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行。注意&#xff0c;defer语句只能出现在函数或方法的内部。 defer 语句经常被用于处理成对的操作&#xff0c;如打开、关闭、连接、断开连接、加锁、释放锁。通过defer 机制&#xff0…

生态共建 | 华宇TAS应用中间件与新华三服务器完成兼容互认证

近日&#xff0c;华宇TAS应用中间件完成与新华三技术有限公司的R4930系列和R4970 G7服务器的兼容适配&#xff0c;认证测试报告显示&#xff0c;双方产品兼容性良好&#xff0c;运行稳定、安全&#xff0c;可以满足用户对双方功能的要求。 新华三技术有限公司 新华三技术有限公…

Pandas数据清洗实战:精准捕捉并优雅过滤异常值,让数据分析更可靠!

1.describe()&#xff1a;查看每一列的描述性统计量 # 导包 import numpy as np import pandas as pddf pd.DataFrame(datanp.random.randint(0,10,size(5,3)),indexlist("ABCDE"),columns["Python","NumPy","Pandas"]) dfdf.descri…

SQL MINUS 运算符:查找数据集之间的差异

在 SQL 中&#xff0c;MINUS 运算符在查询中起着至关重要的作用&#xff0c;它允许开发人员识别和检索存在于一个数据集中但不存在于另一个数据集中的记录。本文探讨了 SQL 中 MINUS 运算符的功能、用法和实际应用&#xff0c;强调了它在数据分析和操作任务中的重要性。 理解 …

adobe pdf设置默认打开是滚动而不是单页视图

上班公司用adobe pdf&#xff0c;自己还不能安装其它软件。 每次打开pdf&#xff0c;总是默认单页视图&#xff0c;修改滚动后&#xff0c;下次打开又 一样&#xff0c;有时候比较烦。 后面打开编辑->首选项&#xff0c; 如下修改&#xff0c;下次打开就是默认滚动了

开源六轴协作机械臂myCobot280实现交互式乘法!让学习充满乐趣

本文经作者Fumitaka Kimizuka 授权我们翻译和转载。 原文链接&#xff1a;myCobotに「頷き」「首振り」「首傾げ」をしてもらう &#x1f916; - みかづきブログ・カスタム 引言 Fumitaka Kimizuka 创造了一个乘法表系统&#xff0c;帮助他的女儿享受学习乘法表的乐趣。她可以…

FPGA问题

fpga 问题 ep2c5t144 开发板 第一道坎&#xff0c;安装软件&#xff1b;没有注册&#xff0c;无法产生sop文件&#xff0c;无法下载 没有相应的库的quartus ii版本&#xff0c;需要另下载 第二道坎&#xff0c;模拟器的下载&#xff0c;安装&#xff1b; 第三道&#xff0c;v…

Camera Raw:红眼

Camera Raw 的红眼 Red Eye面板可高效地修正照片中的红眼现象。 红眼现象通常是由于闪光灯直接照射到眼睛内的视网膜所引起的&#xff0c;在摄影中常见于低光环境下的拍摄&#xff0c;尤其是在人物和宠物照片中。 在一些老照片中可能存在红眼现象&#xff0c;现代摄影技术基本上…

图像的反转

图像颜色的反转一般分为两种&#xff1a;一种是灰度图片的颜色反转&#xff0c;另一种是彩色图像的颜色反转。 本节使用的原图如下&#xff1a; 1.1 灰度图像颜色反转 灰度图像每个像素点只有一个像素值来表示&#xff0c;色彩范围在0-255之间&#xff0c;反转方法255-当前像…