BGN40 小红闯关 题解

题面链接
考虑反悔贪心,当我们拿到跳关器时立即使用,但是当后续出现所需时间更长的,进行反悔。
使用可重集维护已经用了跳关器的关卡时间,每次把其中最小的和当前关比较,如果当前关花费时间更长,则进行更换。
参考代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[100010],ans=0;
multiset<int>s;
signed main(){
    ios::sync_with_stdio(false),cin.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];ans+=a[i];
    }
    for(int i=1,j=0;i<=n;i++,j=(j+1)%k){
        if(j==0&&i!=1)s.insert(a[i]),ans-=a[i];
        else if(s.size()&&(*s.begin())<a[i]){
            ans-=(a[i]-*s.begin());
            s.erase(s.begin());
            s.insert(a[i]);
        }
    }
    cout<<ans<<'\n';
}
posted @ 2025-12-16 14:28  spring_sun  阅读(10)  评论(0)    收藏  举报