D. Serval and Kaitenzushi Buffet
题目链接👈
题目描述🥰

题目思路😀
这个题目的贪心思路真的是很妙了🤯想了很久也没有想到这个贪心的思路😭
我们可以计算到每一个寿司的最晚拿取时间,然后对于时间进行枚举,如果时间 i 是前 i 个寿司里面某个寿司的最晚拿取时间,我们就可以直接把前面寿司里面的最美味的吃掉即可,这样即不会导致寿司没被吃完,又可以贪心地吃到最美味的寿司。
思路出来了,代码实现就很简单了
AC代码🧠
void solve()
{
int n,k;
cin>>n>>k;
priority_queue<int>q;
//设第i个寿司的拿取时间设为t
// 那么 n-t>=i*(k+1)-1 -->t<=n-i*(k+1)+1
//所以第i个寿司的最晚拿去时间是 n-i*(k+1)+1
//对时间进行枚举
int ans=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
q.push(x);
//n-t=i*(k+1)-1 -->i(k+1)=(n-t+1);
//当当前的时间i满足某个寿司的最晚拿取时间,就拿取里面最美味的那个
if((n-i+1)%(k+1)==0){
ans+=q.top();
q.pop();
}
}
cout<<ans<<endl;
}
posted on
浙公网安备 33010602011771号