贪心-CF545D Queue 题解

这是一篇关于贪心算法的博客,详细解析了CF545D Queue问题的解决思路。作者使用优先队列作为主要数据结构,通过牺牲部分顾客满意度,力求最大化总体满意度。文章包含原创代码和题解,适合学习和交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法分析

本题是一道比较简单的贪心题,本着多练练STL的原则,本文题解用优先队列进行实现。本题值得注意的是,经过分析,我们只需要让不满意的人数尽量少即可,题目要求中,并不关心每一个顾客的不满意程度,所以我们可以“牺牲”一些顾客,来使得尽可能多的顾客满意。

代码及题解

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=100050;
struct per{
	int tim;                                  //服务时间 
	per():tim(0){}                            //构造函数用于在定义时就清空结构体,增强代码的鲁棒性。 
	bool operator < (const per& b) const{     //重定义比较运算符 
	  return tim>b.tim;
	}
};
priority_queue<per> q;
int n,ans=0;
int c=0;                                    //等待时间 
int main(){
	
	
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	cin>>n;
	for(int i=0;i<n;i++){
		per node;
		cin>>node.tim;
		q.push(node);
	}

	while(!q.empty()){
		per top=q.top();
		if(c<=top.tim){                         //注意这里,只有这个人不失望了,才会让他排在队伍里,才会让c增加,如果这个人已经失望了,那就不如直接让他不排队了(或认为将其排到队尾),直接让其失望到底。 
		  ans++;
		  c+=top.tim;
		}
		q.pop();
	}
	cout<<ans;

	return 0;
} 

作者

Bowen
本文代码及题解均为作者原创,转载请注明出处。
本文作者水平有限,如有纰漏之处,敬请斧正。欢迎大家一起学习交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值