2024年12月GESP真题及题解(C++七级): 武器购买

2024年12月GESP真题及题解(C++七级): 武器购买

题目描述

商店里有n nn个武器,第i ii个武器的强度为p i p_ipi,花费为c i c_ici

小杨想要购买一些武器,满足这些武器的总强度不小于P PP,总花费不超过Q QQ,小杨想知道是否存在满足条件的购买方案,如果有,最少花费又是多少。

输入格式

第一行包含一个正整数t tt,代表测试数据组数。

对于每组测试数据,第一行包含三个正整数n , P , Q n,P,Qn,P,Q,含义如题面所示。

之后n nn行,每行包含两个正整数p i , c i p_i,c_ipi,ci,代表武器的强度和花费。

输出格式

对于每组测试数据,如果存在满足条件的购买方案,输出最少花费,否则输出-1

输入输出样例 1
输入 1
3 3 2 3 1 2 1 2 2 3 3 3 4 1 2 1 2 2 3 3 1000 1000 1 2 1 2 2 3
输出 1
3 -1 -1
说明/提示
子任务编号数据点占比n nnp i p_ipic i c_iciP PPQ QQ
1 1120 % 20\%20%≤ 10 \leq 10101 111 11≤ 10 \leq 1010≤ 10 \leq 1010
2 2220 % 20\%20%≤ 100 \leq 100100≤ 5 × 10 4 \leq 5\times 10^45×1041 11≤ 5 × 10 4 \leq 5\times 10^45×1042 22
3 3360 % 60\%60%≤ 100 \leq 100100≤ 5 × 10 4 \leq 5\times 10^45×104≤ 5 × 10 4 \leq 5\times 10^45×104≤ 5 × 10 4 \leq 5\times 10^45×104≤ 5 × 10 4 \leq 5\times 10^45×104

对于全部数据,保证有1 ≤ t ≤ 10 1\leq t\leq 101t101 ≤ n ≤ 100 1\leq n\leq 1001n1001 ≤ p i , c i , P , Q ≤ 5 × 10 4 1\leq p_i,c_i,P,Q\leq 5\times 10^41pi,ci,P,Q5×104

思路分析

这是一个有总花费上限的01背包问题,但约束条件是总强度至少为P(而不是恰好等于)。我们需要在不超过总花费Q的前提下,选择武器使得总强度≥P,并求最小花费。

核心思路

这是一个二维约束的背包问题

  • 花费是成本,需要最小化
  • 强度是收益,需要至少达到P

我们可以转换思路:用强度作为背包容量,求达到每个强度所需的最小花费,然后从强度≥P的方案中找出花费≤Q的最小值。

算法设计

使用动态规划

  • 状态定义:dp[i]表示达到强度 i 所需的最小花费
  • 初始状态:dp[0] = 0,其他为无穷大
  • 状态转移:对于每个武器(强度p,花费c),从高到低更新:
    dp[j] = min(dp[j], dp[max(0, j-p)] + c)
    注意:当j-p < 0时,说明当前武器单独就能达到强度j,所以用max(0, j-p)
  • 最终答案:在j ≥ P的所有状态中,找到dp[j] ≤ Q的最小dp[j]
时间复杂度

O(n × P),其中n≤100,P≤50000,最坏情况5×10 6 10^6106次操作,可以接受。

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintINF=1e9;// 无穷大值intmain(){ios::sync_with_stdio(false);cin.tie(0);intt;cin>>t;while(t--){intn,P,Q;cin>>n>>P>>Q;vector<int>p(n),c(n);for(inti=0;i<n;i++){cin>>p[i]>>c[i];}// dp[i]表示达到强度i所需的最小花费// 因为强度可能超过P,但最多不会超过P+最大单个强度intmaxSum=P+50000;// 最大可能强度vector<int>dp(maxSum+1,INF);dp[0]=0;// 强度为0时花费为0// 01背包:从高到低更新,保证每个武器只用一次for(inti=0;i<n;i++){intpi=p[i],ci=c[i];for(intj=maxSum;j>=0;j--){// 计算如果选择当前武器,能达到的强度intpre=max(0,j-pi);// 注意:强度不能为负if(dp[pre]!=INF){dp[j]=min(dp[j],dp[pre]+ci);}}}// 寻找答案:强度≥P且花费≤Q的最小花费intans=INF;for(inti=P;i<=maxSum;i++){if(dp[i]<=Q){ans=min(ans,dp[i]);}}if(ans==INF){cout<<"-1\n";}else{cout<<ans<<"\n";}}return0;}

功能分析

1. 输入处理
  • 读取测试用例数t
  • 对于每个测试用例,读取n、P、Q和武器信息
  • 使用vector存储武器数据
2. 动态规划核心
  • dp[i]存储达到强度i的最小花费
  • 初始化所有状态为无穷大,只有dp[0]=0
  • 遍历每个武器,从高到低更新dp数组
  • 状态转移:dp[j] = min(dp[j], dp[max(0, j-p)] + c)
3. 答案查找
  • 遍历所有强度≥P的状态
  • 找出其中花费≤Q的最小花费
  • 如果找不到满足条件的解,输出-1
4.示例验证

对于第一个样例:

输入: 3 2 3 1 2 1 2 2 3 过程: dp[0]=0 武器1(1,2): dp[1]=2 武器2(1,2): dp[1]=min(2,0+2)=2, dp[2]=min(INF,0+2)=2 武器3(2,3): dp[2]=min(2,0+3)=2, dp[3]=min(INF,1+3)=4 强度≥2的最小花费:dp[2]=2≤3,输出2 但实际正确输出是3,为什么? 问题分析: 我们需要总花费≤3,但dp[2]=2≤3是满足的。 但题目要求总花费不超过Q,且总强度≥P。 选择武器1和武器2:强度1+1=2≥2,花费2+2=4>3,不满足。 选择武器3:强度2≥2,花费3≤3,满足,所以最小花费是3。 我们的算法有问题吗? 让我们重新检查算法: 武器1(1,2):dp[1]=2 武器2(1,2):更新时,从高到低: j=2: pre=max(0,2-1)=1, dp[2]=min(INF, dp[1]+2=4)=4 j=1: pre=max(0,1-1)=0, dp[1]=min(2, dp[0]+2=2)=2 武器3(2,3):更新: j=3: pre=max(0,3-2)=1, dp[3]=min(INF, dp[1]+3=5)=5 j=2: pre=max(0,2-2)=0, dp[2]=min(4, dp[0]+3=3)=3 j=1: pre=max(0,1-2)=0, dp[1]=min(2, dp[0]+3=3)=2 最终dp[2]=3,强度≥2的最小花费是3,正确!
5.复杂度分析
  • 时间复杂度:O(t × n × (P + maxP)),最坏情况约10 × 100 × 100000 = 1e8次操作,可以接受
  • 空间复杂度:O(P + maxP),最大约100000
6.关键点总结
  1. 问题转化:将"至少达到P强度"转化为"达到强度i的最小花费"
  2. 边界处理:使用max(0, j-p)处理j-p为负的情况
  3. 答案查找:在强度≥P的所有状态中找满足花费约束的最小值
  4. 优化剪枝:强度上限设为P+最大单个强度,避免不必要的计算

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}

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

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

相关文章

告别问卷设计 “闭门造车”!宏智树 AI:新手也能做出专业级调研问卷

作为深耕论文写作科普的教育博主&#xff0c;后台每天都被大学生的课程论文焦虑刷屏&#xff1a;“选题太泛被导师打回”“文献堆砌逻辑混乱”“查重率居高不下”“格式细节反复修改”…… 课程论文看似是 “小作业”&#xff0c;实则是学术写作的入门试炼&#xff0c;写不好不…

2024年12月GESP真题及题解(C++七级): 燃烧

2024年12月GESP真题及题解(C七级): 燃烧 题目描述 小杨有一棵包含 nnn 个节点的树&#xff0c;其中节点的编号从 111 到 nnn。节点 iii 的权值为 aia_iai​。 小杨可以选择一个初始节点引燃&#xff0c;每个燃烧的节点会将其相邻节点中权值严格小于自身权值的在节点间扩散直到…

告别课程论文 “凑字数”!宏智树 AI 教你写出高分学术范

作为深耕论文写作科普的教育博主&#xff0c;后台每天都被大学生的课程论文焦虑刷屏&#xff1a;“选题太泛被导师打回”“文献堆砌逻辑混乱”“查重率居高不下”“格式细节反复修改”…… 课程论文看似是 “小作业”&#xff0c;实则是学术写作的入门试炼&#xff0c;写不好不…

CVE-2025-61757高级检测与利用验证脚本

CVE-2025-61757高级检测脚本 &#x1f6a8; 项目概述 这是一个针对CVE-2025-61757漏洞的高级检测与概念验证脚本。该漏洞存在于Oracle身份管理器&#xff08;Oracle Identity Manager&#xff09;中&#xff0c;是一个**身份验证前远程代码执行&#xff08;Pre-auth RCE&…

【收藏】2026版 | AI大模型重构程序员职业赛道:三大核心技能决定你的薪资天花板

2026年的技术圈&#xff0c;AI大模型已从规模化落地的深水区&#xff0c;迈入产业深度融合的新阶段&#xff0c;一场针对程序员群体的职业重构正在加速上演。当头部企业的招聘需求成为行业风向标&#xff0c;我们清晰地看到&#xff1a;技术从业者的命运分水岭&#xff0c;已与…

告别站长工具老古董,Google搜索中心真香指南(附迁移避坑手册)

告别站长工具老古董&#xff0c;Google搜索中心真香指南&#xff08;附迁移避坑手册&#xff09;告别站长工具老古董&#xff0c;Google搜索中心真香指南&#xff08;附迁移避坑手册&#xff09;从“站长”到“搜索中心”&#xff1a;Google 这波改名差点把我送走新界面像相亲对…

pytest文档 - pytest-runtime-yoyo 对用例运行时长断言

说明 pytest 执行用例的时候&#xff0c;我们希望对用例的运行时间断言&#xff0c;当用例执行时长大于预期标记此用例失败。 pytest.mark.runtime(1) 运行时长单位是秒 此插件已打包上传到pypi https://pypi.org/project/pytest-runtime-yoyo/1.0.0/ 基本示例 test_demo.py …

收藏!大模型技术学习:从理论到实践再到应用全指南

对于想要入门大模型技术的小白程序员&#xff0c;或是想系统提升技能的开发者来说&#xff0c;单纯零散学习知识点远远不够。大模型技术的掌握&#xff0c;需要搭建起“理论奠基实践落地应用拓展”的完整知识体系。本文整理了一套循序渐进的大模型学习路线&#xff0c;覆盖核心…

基于SpringBoot+Vue的专辑鉴赏网站管理系统设计与实现【Java+MySQL+MyBatis完整源码】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着数字音乐产业的快速发展&#xff0c;音乐爱好…

证件门禁电子化,NFC打造安全便捷的“数字钱包”

随着数字化进程的加快&#xff0c;手机NFC功能逐渐突破支付边界&#xff0c;在证件管理和门禁通行领域发挥重要作用&#xff0c;通过模拟实体卡片、读取电子证件信息&#xff0c;实现“一机在手&#xff0c;通行无忧”&#xff0c;既减少了实体卡片的携带负担&#xff0c;又兼顾…

学黑客技术不迷路!2025 最新网站大全:漏洞库(CNVD/NVD)+ 实战平台(Hack The Box)全解析!

今天给大家分享一些学习网络安全的好去处。对于网络安全的学习&#xff0c;多逛论坛、阅读他人的技术分析帖是非常重要的。但有时候&#xff0c;初学者可能会感到迷茫&#xff0c;不知道去哪里寻找这些技术分析帖&#xff0c;也不知道有哪些相关的论坛或网站。所以&#xff0c;…

SDK游戏盾的工作原理具体是怎么完成防护的?

简单理解为三层的防护&#xff1a;玩家&#xff08;用户&#xff09; &#x1f51c; SDK &#x1f51c; 游戏盾节点 &#x1f51c; 源站服务器&#x1f7e0; 客户端SDK校验&#xff08;第一道防护机制&#xff09;&#x1f7e2;校验客户端完整性&#xff0c;防止修改或是模…

导师推荐8个AI论文软件,助你搞定研究生毕业论文!

导师推荐8个AI论文软件&#xff0c;助你搞定研究生毕业论文&#xff01; AI 工具如何成为论文写作的得力助手 在研究生阶段&#xff0c;论文写作是一项既重要又繁重的任务。面对庞大的文献资料、复杂的逻辑结构以及严格的格式要求&#xff0c;许多同学常常感到无从下手。而随着…

【顶级EI复现】基于主从博弈的售电商多元零售套餐设计与多级市场购电策略附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

【2025最新】基于SpringBoot+Vue的学生评奖评优管理系统管理系统源码+MyBatis+MySQL

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着教育信息化的快速发展&#xff0c;高校学生评…

2025 程序员接单不踩坑:6 个平台覆盖国内外,新手冲 Fiverr / 猪八戒,大神攻 Toptal/Upwork!

收藏&#xff01;2025年程序员都在用的6个宝藏接单平台 大学生练手&#xff1f;职业码农赚米&#xff1f;失业人过渡&#xff1f;技术牛副业&#xff1f;请选择你的英雄&#xff01; 不管是哪种状态&#xff0c;如果你有接单需求&#xff0c;那就是来对了。接单从渠道而言&am…

公信会议:AI 会议生态服务商,解锁数智协作新可能

人工智能技术的迅猛发展&#xff0c;正推动商业会议从传统的 “工具辅助” 向 “生态协同” 全面升级&#xff0c;成为企业数字化转型的关键抓手。作为深耕行业的 AI 会议生态服务商&#xff0c;公信会议精准锚定企业协作痛点&#xff0c;将六大核心 AI 技术深度融入会议全场景…

做好接口测试之初步认识Postman

我们如果在命令行发送post请求&#xff0c;会很麻烦&#xff0c;效率不高。同时也不方便接口的管理&#xff0c;所以一些优秀的接口测试工具应运而出&#xff0c;Postman就是绕不开的话题之一。 主要功能 Postman主要帮我们干了三件事&#xff1a; 1.把相关集合放到一个集合…

【顶级SCI复现】【日前调度和日内调度两个时间尺度】虚拟电厂多时间尺度调度优化研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

覆盖新老赛道!2025 最热门 25 大就业专业清单:从 AI 到老年医学,选对不愁饭碗!

2025年最热门25大就业专业清单&#xff0c;选对专业未来不愁饭碗 2025年就业形势有多严峻&#xff1f;教育部数据显示。今年高校毕业生预计超过1200万。就业竞争格外激烈&#xff01;但是。选对专业的学生&#xff0c;依然能在求职市场上一骑绝尘。 经过15年教育行业观察&…