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';
}

浙公网安备 33010602011771号