NO.89十六届蓝桥杯备战|动态规划-分组背包-混合背包-多维费用背包|通天之分组背包|排兵布阵|樱花|L国的战斗间谍(C++)
P1757 通天之分组背包 - 洛谷
因为⼀个组⾥⾯最多只能挑⼀个元素,所以我们就以⼀个组为单位。
- 状态表⽰:
dp[i][j]表⽰从前i 组中挑选物品,总重量不超过j 的情况下,最⼤的价值。
那么dp[n][m]就是最终结果。 - 状态转移⽅程:
根据第i组选什么物品,可以分若⼲情况讨论。设选择的物品重量为a,价值为b,此时的最⼤价值就是dp[i - 1][j - a] + b。
因为要的是最⼤值,所以考虑所有物品之后,取所有情况的最⼤值就是dp[i][j]。 - 初始化:
全是0 即可
#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;const int N = 1010;int n, m, cnt;
vector<PII> g[N];
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> m >> n;for (int i = 1; i <= n; i++){int a, b, c; cin >> a >> b >> c;cnt = max(c, cnt);g[c].push_back({a, b});}//动态规划for (int i = 1; i <= cnt; i++){for (int j = m; j >= 0; j--){f[i][j] = f[i-1][j];//在这一组选for (auto& t : g[i]){int a = t.first, b = t.second;if (j >= a) f[i][j] = max(f[i][j], f[i-1][j-a] + b);}}}cout << f[cnt][m] << endl;return 0;
}
空间优化:
#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;const int N = 1010;int n, m, cnt;
vector<PII> g[N];
int f[N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> m >> n;for (int i = 1; i <= n; i++){int a, b, c; cin >> a >> b >> c;cnt = max(c, cnt);g[c].push_back({a, b});}//动态规划for (int i = 1; i <= cnt; i++){for (int j = m; j >= 0; j--){//在这一组选for (auto& t : g[i]){int a = t.first, b = t.second;if (j >= a) f[j] = max(f[j], f[j-a] + b);}}}cout << f[m] << endl;return 0;
}
P5322 [BJOI2019] 排兵布阵 - 洛谷
⼀个城堡⼀个城堡分析,对于第n个城堡,考虑派遣的⼈数应该在所有玩家对这个城堡派遣⼈数中考虑。⽐如⽰例⼆的第三个城堡,我们考虑派遣的⼈数就是1和13 (因为要严格⼤于两倍,⼤⼀点就是最好的)。
因此,把每⼀个城堡看成⼀个⼩组,所有玩家在这个城堡派遣的⼈数看成⼀个⼀个物品,要求的就是在派遣⼈数不超过m 的情况下的最⼤得分,符合分组背包。
⼩优化:对每个城堡中玩家的派遣⼈数从⼩到⼤排序,这样在选择第k个⼈数的时候,总得分就是k × i。
- 状态表⽰:
dp[i][j]表⽰:分配前i 个城堡,在总⼈数不超过j 的情况下,最⼤的得分。
那么dp[n][m]就是最终结果。 - 状态转移⽅程:
根据第i个城堡分配的⼈数,分情况讨论。假设分配的是排序后的第k个元素,那么分配⼈数为a[i][k],此时的最⼤得分为dp[i - 1][j - a[i][k]] + i × k。
由于要的是最⼤值,状态转移⽅程就是上述所有合法的k ⾥⾯的最⼤值。 - 初始化:
全部为0 即可
#include <bits/stdc++.h>
using namespace std;const int N = 110, M = 2e4 + 10;int s, n, m;
int a[N][N];
int f[N][M];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> s >> n >> m;for (int i = 1; i <= s; i++){for (int j = 1; j <= n; j++){cin >> a[j][i];a[j][i] = a[j][i] * 2 + 1;}}//每一行排序for (int i = 1; i <= n; i++){sort(a[i]+1, a[i]+1+s); }//分组背包for (int i = 1; i <= n; i++){for (int j = 0; j <= m; j++){f[i][j] = f[i-1][j];for (int k = 1; k <= s && a[i][k] <= j; k++){f[i][j] = max(f[i][j], f[i-1][j-a[i][k]] + k*i); }}}cout << f[n][m] << endl;return 0;
}
P1833 樱花 - 洛谷
分类讨论
#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 10, M = 1010;int n, m;
int t[N], c[N], p[N];
int f[N];int main()
{ios::sync_with_stdio(false);cin.tie(0);int t1, t2, t3, t4; char ch;cin >> t1 >> ch >> t2 >> t3 >> ch >> t4 >> n;m = t3 * 60 + t4 - (t1 * 60 + t2);for (int i = 1; i <= n; i++) cin >> t[i] >> c[i] >> p[i];for (int i = 1; i <= n; i++){if (p[i] == 0) //完全背包{for (int j = t[i]; j <= m; j++){f[j] = max(f[j], f[j-t[i]] + c[i]); }}else if (p[i] == 1) //01背包{for (int j = m; j >= t[i]; j--){f[j] = max(f[j], f[j-t[i]] + c[i]); }}else //多重背包{for (int j = m; j >= t[i]; j--){for (int k = 1; k <= p[i] && k*t[i] <= j; k++){f[j] = max(f[j], f[j-t[i]*k] + c[i]*k); }}}}cout << f[m] << endl;return 0;
}
多重背包和01背包合并
#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 10, M = 1010;int n, m;
int t[N], c[N], p[N];
int f[N];int main()
{ios::sync_with_stdio(false);cin.tie(0);int t1, t2, t3, t4; char ch;cin >> t1 >> ch >> t2 >> t3 >> ch >> t4 >> n;m = t3 * 60 + t4 - (t1 * 60 + t2);for (int i = 1; i <= n; i++) cin >> t[i] >> c[i] >> p[i];for (int i = 1; i <= n; i++){if (p[i] == 0) //完全背包{for (int j = t[i]; j <= m; j++){f[j] = max(f[j], f[j-t[i]] + c[i]); }}else //多重背包或者01背包{for (int j = m; j >= t[i]; j--){for (int k = 1; k <= p[i] && k*t[i] <= j; k++){f[j] = max(f[j], f[j-t[i]*k] + c[i]*k); }}}}cout << f[m] << endl;return 0;
}
P1910 L 国的战斗之间谍 - 洛谷
⽆⾮就是在01背包的基础上多加了⼀维,那我们就把状态表⽰也加上⼀维即可。
- 状态表⽰:
dp[i][j][k]表⽰:从前i个⼈中挑选,伪装能⼒之和不超过j,总⼯资不超过x,此时能获取到的最多资料总数。
那么dp[n][m][x]就是结果 - 状态转移⽅程:
根据第i 个⼈选或者不选分两种情况讨论:
a. 不选:此时的最多资料为dp[i - 1][j][k];
b. 选:那就要去前i-1各种,凑伪装能⼒之和不超过j-b[i],总⼯资不超过k-c[i]时的最多⼯资,再加上第i个⼈的⼯资。也就是dp[i - 1][j - b[i]][k - c[i]] + a[i]。
取上述两种情况的最⼤值即可。注意第⼆种情况要特判⼀下
#include <bits/stdc++.h>
using namespace std;const int N = 110, M = 1010;int n, m, x;
int a[N], b[N], c[N];
int f[M][M];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m >> x;for (int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> c[i];for (int i = 1; i <= n; i++)for (int j = m; j >= b[i]; j--)for (int k = x; k >= c[i]; k--){f[j][k] = max(f[j][k], f[j-b[i]][k-c[i]] + a[i]); }cout << f[m][x] << endl;return 0;
}
相关文章:
NO.89十六届蓝桥杯备战|动态规划-分组背包-混合背包-多维费用背包|通天之分组背包|排兵布阵|樱花|L国的战斗间谍(C++)
P1757 通天之分组背包 - 洛谷 因为⼀个组⾥⾯最多只能挑⼀个元素,所以我们就以⼀个组为单位。 状态表⽰: dp[i][j]表⽰从前i 组中挑选物品,总重量不超过j 的情况下,最⼤的价值。 那么dp[n][m]就是最终结果。状态转移⽅程&#x…...
NVIDIA H100 vs A100:新一代GPU架构性能对比分析
一、核心架构演进对比 Ampere架构(A100)采用台积电7nm工艺,集成540亿晶体管,配备6,912个CUDA核心和432个第三代Tensor Core,支持FP16、TF32和INT8精度计算。其显存子系统采用HBM2e技术,80GB版本带宽可…...
使用Mybatis时在XML中SQL高亮显示的方法
如图所示,上方的SQL代码很像是一个字符串,那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢? 1.选中SQL中的一部分代码,此时左侧会出现一个黄色的灯泡图案,点击2.选择这个注入语言或者引用...
机场跑道异物检测数据集VOC+YOLO格式33793张31类别
数据集分辨率都是300x300,都是贴近地面拍摄,具体看图片 据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):33793 标注数量(xml文件…...
掌握C语言文件操作:从理论到实战指南
文件操作是C语言编程中不可或缺的一部分,它使得程序能够持久化存储数据,并在需要时高效读写。本文将从基础概念到实战技巧,系统讲解C语言文件操作的核心知识点,并结合代码示例帮助读者深入理解。 一. 为什么需要文件操作…...
如何进行预算考核
✅ 一、预算考核体系总体架构 模块内容说明考核内容1. 预算目标/指标完成情况2. 预算编制/执行情况双轮驱动,目标 + 执行双考核考核对象高层、中层、基层、后台支持分层分类考核考核周期月度(滚动)+ 季度(校验)+ 年度(决算)提高适应性和准确性考核工具指标体系、差错率评…...
在 Linux 上安装 MongoDB Shell
1. 下载 MongoDB Shell Download | MongoDB wget https://downloads.mongodb.com/compass/mongosh-2.5.0-linux-x64.tgz 2. tar -zxvf mongosh-2.5.0-linux-x64.tgz 3. copy 命令 sudo cp mongosh /usr/local/bin/ sudo cp mongosh_crypt_v1.so /usr/local/lib/ 4. …...
数据结构-复杂度详解
前言:大家好!本文带来的是数据结构-复杂度的讲解,一起来看看吧! 1.算法的时间复杂度和空间复杂度 1.1算法的效率 复杂度:衡量一个算法的好坏(效率),从两个维度衡量,时…...
安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程
Vuzix Core™ 光波导技术 近期,Vuzix Core™光波导技术赋能AR新视界!该系列镜片支持定制化宽高比调节及20至40视场角范围,可灵活适配各类显示引擎。通过创新的衍射光波导架构,Vuzix Core™实现了光学传输效率与图像质量的双重突破…...
【SQL】常见SQL 行列转换的方法汇总 - 精华版
【SQL】常见SQL 行列转换的方法汇总 - 精华版 一、引言二、SQL常见的行列转换对比1. 行转列 Pivoting1.1 CASE WHEN 聚合函数1.2 IF 聚合函数1.3 PIVOT操作符 2.列转行 Unpivoting2.1 UNION ALL2.2 EXPLODE函数(Hive/Spark&#…...
【原创】vue-element-admin-plus完成确认密码功能,并实时获取Form中表单字段中的值
前言 我第一句就想说:vue-element-admin-plus真是个大坑货!就一个确认密码功能都值得我单开一页博客来讲这么一个简单的功能 布局和代码 布局如图所示,我需要密码和确认密码,确认密码需要和密码中的内容一致,不然会返…...
Vue3中watch监视reactive对象方法详解
在Vue3中,使用watch监视reactive对象时,需根据监视的目标选择合适的方法。以下是详细的步骤和说明: 1. 监视整个reactive对象 自动深度监视:直接监视reactive对象时,Vue3会默认启用深度监视,无需设置deep:…...
PyTorch实现多输入输出通道的卷积操作
本文通过代码示例详细讲解如何在PyTorch中实现多输入通道和多输出通道的卷积运算,并对比传统卷积与1x1卷积的实现差异。 1. 多输入通道互相关运算 当输入包含多个通道时,卷积核需要对每个通道分别进行互相关运算,最后将结果相加。以下是实现…...
MySQL---数据库基础
1.数据库概念 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介质: 1.磁盘 2.内存 为了解决上述问题,设计出更加利于管理数据的东西 —— 数据库。…...
leetcode68.左右文本对齐
思路源自 leetcode-字符串篇 68题 文本左右对齐 难度高的模拟类型题目,关键点在于事先知道有多少单词要放在本行并且还要知道本行是不是最后一行(最后一行需要全部单空格右对齐,不是最后一行就空格均摊),非最后一行的空…...
若依微服务集成Flowable仿钉钉工作流
项目简介 本项目工作流模块集成在若依项目单独一个模块,可实现单独运行部署, 前端采用微前端,嵌入在若依的前端项目中。因博主是后端开发,对前端不是太属性,没将工作流模块前端代码移到若依前端。下面贴上代码工程结构…...
MySQL 架构设计:数据库的“城市规划指南“
就像一座完美城市需要精心的规划才能高效运行,一个优秀的 MySQL 系统也需要精心的架构设计才能支撑业务的发展…让我们一起探索 MySQL 的"城市规划",学习如何设计一个既高效又稳定的数据库王国! 什么是 MySQL 架构设计?…...
【从0到1学MybatisPlus】MybatisPlus入门
Mybatis-Plus 使用场景 大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国…...
依靠视频设备轨迹回放平台EasyCVR构建视频监控,为幼教连锁园区安全护航
一、项目背景 幼教行业连锁化发展态势越发明显。在此趋势下,幼儿园管理者对于深入了解园内日常教学与生活情况的需求愈发紧迫,将这些数据作为提升管理水平、优化教育服务的重要依据。同时,安装监控系统不仅有效缓解家长对孩子在校安全与生活…...
【简单理解什么是简单工厂、工厂方法与抽象工厂模式】
一、简单工厂模式 1.简单工厂模式 通过一个工厂类集中管理对象的创建 ,通过参数决定具体创建哪个对象。 #适合对象类型较少且变化不频繁的场景,缺点是违反开闭原则(新增产品需修改工厂类) 开闭原则(对扩展开放对修改关闭) :当…...
DeepSeek和文心一言的区别
文章目录 1.开发公司:2.应用场景:3.训练数据:4.模型架构:5.技术特点:6.语言风格:7.开源性:8.界面与用户体验: 1.开发公司: DeepSeek 由杭州深度求索人工智能基础技术研究…...
HOW - React Developer Tools 调试器
目录 React Developer Tools使用Components 功能特性1. 查看和编辑 props/state/hooks2. 查找组件3. 检查组件树4. 打印组件信息5. 检查子组件 Profiler 功能特性Commit ChartFlame Chart 火焰图Ranked Chart 排名图 why-did-you-render 参考文档: React调试利器&a…...
STM32F103C8T6单片机开发:简单说说单片机的外部GPIO中断(标准库)
目录 前言 如何使用STM32F1系列的标准库完成外部中断的抽象 初始化我们的GPIO为输入的一个模式 初识GPIO复用,开启GPIO的复用功能时钟 GPIO_EXTILineConfig和EXTI_Init配置外部中断参数 插入一个小知识——如何正确的配置结构体? 初始化中断&#…...
Oracle序列介绍
文章目录 Oracle序列介绍1. Oracle序列演进2. Oracle序列使用3. Oracle身份列(自增列)4. Oracle序列常见使用与问题 Oracle序列介绍 1. Oracle序列演进 Oracle序列(Sequence)是数据库生成唯一数值序列的对象,主要用于…...
docker的安装使用0废话版本自学软硬件工程师778天
见字如面, 这里是AIGC创意人_竹相左边 上一篇 因为 自己开发客户系统,为了解决一键启动 前端后端,涉及到了docker-compose 在新的电脑上安装docker 有各种问题这里再次记录下,既是笔记也是分享。 我先用自己的话说一遍࿰…...
探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发
框架太“重”了:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是…...
3D数据共享标准——GLB文件格式揭秘
GLB 文件格式:跨平台 3D 数据共享的标准 简介 在这个数据爆炸的时代,3D 数据因其直观、逼真的特点而得到广泛应用。然而,不同 3D 软件和平台之间的兼容性一直是一个难题。 为了解决这一问题,GLB 文件格式应运而生。作为一种标准…...
微信小程序事件绑定基本语法
微信小程序使用 bind 或 catch 前缀绑定事件,语法如下: <组件 bind事件名"处理函数" catch事件名"处理函数"></组件> bind:事件绑定,允许事件冒泡(向父组件传递)。 catc…...
页面编辑器CodeMirror初始化不显示行号或文本内容
延迟刷新 本来想延迟100毫秒的,但是会出现样式向左偏移的情况,于是试了试500毫秒,发现就没有问题了,可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...
vscode 连不上 Ubuntu 18 server 的解决方案
下载 vscode 历史版本 18.5(windows请装在 系统盘 C 盘) 打开 vdcode,将 自动更新 设置为 None (很关键,否则容易前功尽弃) 重命名(删除) 服务器上的 .vscode-server 文件夹 重新…...
