1 条题解
-
0
小广告:双倍经验
废话不多说,来看题解。
题目传送门
很显然,使用反悔贪心。
题目大意
题目说,TA (以下简称 T ) 每次可以比赛,收集勋章,然后用来升级,但是只能在等级 及以下才能参加这场比赛,然后提升 级等级和获得 枚勋章。
T 可以按任意顺序参加这些比赛,尽可能多拿徽章,问 T 最多可以获得多少徽章。
思路
排序
你可能第一次会认为是按照 排序比赛内容,这很有可能是错的,因为如果你通过的第 个比赛但并不需要通过后的 尽量小,所以会错。我们应该按 来排序。
反悔贪心的内容
当 T 对当前这一个比赛无法满足时,T 会去替换掉前面比赛中 值最大的一场,所以我们要使用大根堆。
堆(优先队列)在这。
:::success[AC代码]{open} 不要只动鼠标哦!
#include<bits/stdc++.h> using namespace std; long long n,t; long long cnt; struct node { long long d,p; }a[10000005]; bool cmp(node a,node b) { return a.p+a.d<b.p+b.d; } priority_queue<long long> q; int main(){ cin>>n; for(long long i=1;i<=n;i++) { cin>>a[i].p; } for(long long i=1;i<=n;i++) { cin>>a[i].d; } sort(a+1,a+n+1,cmp); for(long long i=1;i<=n;i++) { if(a[i].d<t) { if(a[i].p<q.top()) { t=t-q.top()+a[i].p; q.pop(); q.push(a[i].p); } } else { q.push(a[i].p); cnt++; t+=a[i].p; } } cout<<cnt; return 0; }:::
:::info[updata]{close}
2026/2/21 之前不记录。
2026/2/21:将 “[这]。(https://www.luogu.com.cn/paste/h42bv90a) ” 改为 “这。”
:::
- 1
信息
- ID
- 10998
- 时间
- 1500ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者