当前位置: 首页 > news >正文

P16307 [蓝桥杯 2026 省 Java/Python 研究生组] 抓取卡牌 题解

P16307 [蓝桥杯 2026 省 Java/Python 研究生组] 抓取卡牌

Link: https://www.luogu.com.cn/problem/P16307

题目描述

n nn种不同的卡牌,其中第i ii种卡牌的基础价值为v i v_ivi,数量为a i a_iai张。

你需要从这些卡牌中恰好选出X XX张,组成自己的卡组。

对于同一种卡牌,随着你选取的数量增加,它后续的价值会下降。具体地,若某种基础价值为v vv的卡牌已经被选了k kk张,那么下一张这种卡牌的价值为:

⌊ v k + 1 ⌋ \left\lfloor \frac{v}{k + 1} \right\rfloork+1v

⌊ x ⌋ \lfloor x \rfloorx表示对x xx向下取整,即不超过x xx的最大整数。

也就是说:

  • 选第1 11张该种卡牌时,价值为⌊ v 1 ⌋ = v \left\lfloor \frac{v}{1} \right\rfloor = v1v=v
  • 选第2 22张时,价值为⌊ v 2 ⌋ \left\lfloor \frac{v}{2} \right\rfloor2v
  • 选第3 33张时,价值为⌊ v 3 ⌋ \left\lfloor \frac{v}{3} \right\rfloor3v
  • 依此类推。

每种卡牌至多只能选取a i a_iai张。

现在,请你计算:恰好选出X XX张卡牌时,能够得到的最大总价值是多少。

输入格式

输入共三行。

第一行包含两个整数n , X n, Xn,X,分别表示卡牌种类数和需要选取的卡牌总数。

第二行包含n nn个整数v 1 , v 2 , … , v n v_1, v_2, \dots, v_nv1,v2,,vn,表示每种卡牌的基础价值。

第三行包含n nn个整数a 1 , a 2 , … , a n a_1, a_2, \dots, a_na1,a2,,an,表示每种卡牌可供选取的数量。

输出格式

输出一行一个整数,表示最大总价值。

输入输出样例 #1

输入 #1

6 6 1 1 2 3 4 5 1 2 1 2 3 4

输出 #1

18

说明/提示

【样例说明】

将所有可能选取的单张卡牌价值展开后,可得:

  • 1 11种卡牌可贡献:1 11
  • 2 22种卡牌可贡献:1 , 0 1, 01,0
  • 3 33种卡牌可贡献:2 22
  • 4 44种卡牌可贡献:3 , 1 3, 13,1
  • 5 55种卡牌可贡献:4 , 2 , 1 4, 2, 14,2,1
  • 6 66种卡牌可贡献:5 , 2 , 1 , 1 5, 2, 1, 15,2,1,1

从中选出最大的6 66个值:5 , 4 , 3 , 2 , 2 , 2 5, 4, 3, 2, 2, 25,4,3,2,2,2,它们的和为:5 + 4 + 3 + 2 + 2 + 2 = 18 5+4+3+2+2+2 = 185+4+3+2+2+2=18,因此答案为18 1818

【评测用例规模与约定】

对于50 % 50\%50%的评测用例,1 ≤ n , X ≤ 5000 1 \le n, X \le 50001n,X5000

对于所有的评测用例,满足:1 ≤ n ≤ 2 × 10 5 1 \le n \le 2 \times 10^51n2×1050 ≤ X , a i ≤ 2 × 10 5 0 \le X, a_i \le 2 \times 10^50X,ai2×1050 ≤ v i ≤ 10 9 0 \le v_i \le 10^90vi109

保证所有卡牌总数不少于X XX


Solution

1. 题意

n nn种卡牌,第i ii种初始时有a i a_iai张。同种卡牌被选择的次数越多,后续的价值会按照反比例下降,求最优的选卡方案。

2. 分析

由于每种卡牌的价值随选取数量增加而单调不增,因此可以将每种卡牌视为一个已经排好序的递减序列(n nn种卡牌那就是元素为序列的序列)。

题目要求从所有这些序列中选出全局最大的X XX个值,可通过最大堆高效实现。

具体地说,对于每种卡牌i ii,第1 11张的价值一定是最大的,为v i v_ivi。我们将所有a i > 0 a_i>0ai>0的卡牌的首张价值以及张数作为一个二元状态组( v i , i ) (v_i,i)(vi,i)放入最大堆中。同时用一个数组{ k i } \{k_i\}{ki}记录第i ii种卡牌当前已经选到了第几张。

最优的选卡,就是重复X XX次下面的操作:

  • 抽卡,也就是弹出堆顶元素(当前所有可选卡牌中价值最大的一张),将其价值累加到答案中,记录这张卡的标号j jj

  • 该种卡牌的计数器k j k_jkj1 11。如果k j < a j k_j<a_jkj<aj,说明该种卡牌还有剩余,则计算下一张的价值⌊ v j k j ⌋ \left \lfloor \dfrac{v_{j}}{k_{j}} \right \rfloorkjvj并将此值移入堆中。

根据最大堆的性质,每次抽卡后,所有卡牌的价值会自动重新排布使得新的价值最大的卡牌编号及其价值“浮出水面”,因此顺着这个思路一定能得到最优解。

3. 代码

#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,X;if(!(cin>>n>>X))return0;vector<int>v(n),a(n);for(inti=0;i<n;++i){cin>>v[i];}for(inti=0;i<n;++i){cin>>a[i];}vector<int>k(n,1);priority_queue<pair<int,int>>pq;for(inti=0;i<n;++i){if(a[i]>0){pq.emplace(v[i],i);}}longlongans=0;for(inti=0;i<X;++i){auto[val,idx]=pq.top();pq.pop();ans+=val;k[idx]++;if(k[idx]<=a[idx]){pq.emplace(v[idx]/k[idx],idx);}}cout<<ans<<endl;return0;}
http://www.jsqmd.com/news/892914/

相关文章:

  • 【算法分析与设计】第11篇:图的表示与遍历算法:BFS与DFS的扩展性质
  • 终极指南:如何永久保存你的微信聊天记录?免费开源工具WeChatExporter完整教程
  • 收藏!从提示词小白到AI大模型开发者,你需要的不只是工具
  • 【无标题】AI 智能体时代的超级个体:OPC 与 OPD 人才生态分析
  • 2026 论文双降工具横评:从 paperxie 到 9 大神器,查重降 AIGC 全场景通关
  • 自动化部署项目软件 Jenkins
  • 长沙靠谱训犬寄养优选指南|岳麓/雨花/开福/天心/星沙/望城5家店铺推荐 - 资讯速览
  • 02、双指针删除元素
  • 一文啃完DNS:原理+查询+BIND部署全攻略
  • 2026年AI漫剧视频模型行业白皮书
  • 云原生技术学习日志Day01:Linux基础入门
  • 北京上门回收明清古籍老书旧书 金石拓片印谱正规渠道首选 - 品牌排行榜单
  • WarcraftHelper 终极指南:3分钟解决魔兽争霸3卡顿、宽屏、FPS限制等常见问题
  • Sora 2正式版发布首周深度逆向:Transformer时序建模新范式、世界模型耦合机制与3个尚未修复的生成漏洞(内测工程师内部备忘录)
  • Agent开发面经
  • 保姆级教程:用RDPWrap解锁Win10/11家庭版远程桌面,还能多人同时登录
  • 国内地基地梁模板头部供应商排行 实测维度客观对比 - 奔跑123
  • 基于SCCA-RMP的属性网络异常检测:融合结构与属性视图的鲁棒方法
  • Pulover‘s Macro Creator 终极指南:从零到精通的自动化脚本生成器
  • 关于 GEO 的常见误区:你需要避免的五个关键认知偏差
  • 2026年6月帝舵售后服务中心官方公告:官方服务热线公布,更新门店地址清单 - 资讯速览
  • 从卡文到爆文只需17分钟,专业作家私藏的ChatGPT创意生成工作流,限免开放48小时
  • 成都靠谱训犬寄养优选指南|锦江/武侯/成华/青羊/郫都/双流5家店铺推荐 - 资讯速览
  • 信息检索结合制品关系:提升需求追踪精度的IR_CRT方法详解
  • 深圳小程序公司推荐 助力企业数字化转型优质服务商 - 软件测评师
  • 2026最新廊坊水处理药剂品牌排行:5家头部品牌实力对比 廊坊水处理药剂品牌推荐 - 奔跑123
  • Wireshark深度流量分析实战:从协议解析到根因定位
  • 国内水泥围墙模具头部企业排行:品质与服务实测对比 - 奔跑123
  • 鸿蒙英语备考页面构建:考试选择与每日进度模块详解
  • C语言入门——C语言常见概念