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 2025-03-29 19:57  熙玺  阅读(25)  评论(0)    收藏  举报

Shu-How Zの小窝

Loading...