poj2970

本文介绍如何利用C++中的优先队列来解决任务调度问题,包括定义优先队列、自定义比较器以及实现任务调度的算法流程。通过实例分析,详细解释了如何在截止日期前合理安排任务,确保高效执行。

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

这个题被丁神教育了c++调用优先队列的姿势。。。

下面总结一下。。

#include<queue>

priority_queue<xxx,vecrot<xxx>,cmp>

第一个和第二个xxx是当前堆里的数据类型,第三个参量则是一个比较的结构体,和sort里的cmp不同,堆里的cmp要求是一个结构体,而且是默认大根堆,不妨认为越小的越在下面。


cmp的写法


struct rec {int a,b;};

struct cmp

{

    bool operator() (rec x,rec y)

    {

        return x.a<y.a;

    }

}//这样写出来的是大根堆!虽然比较符号是小于号。


其他的

priority_queue<int,vector<int>,greater<int> >小根堆注意两个>中间要有空格;

priority_queue<int,vector<int>,less<int> >大根堆;

至于这个题

如果当前任务在其deadline之前完不成的话,就把前面的a最大的工作能往前推一推的推一推。。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
struct rec{int a,b,d;double x;} work[100100];
struct cmp1
{
	bool operator() (rec x,rec y)
	{
		return x.a<y.a;
	}
};
int cmp2(rec x,rec y)
{
	return x.d<y.d;
}
priority_queue <rec,vector<rec>,cmp1>q;
int n;
int main()
{
	while (scanf("%d\n",&n)!=EOF)
	{
		for (int i=1;i<=n;i++)
		{
			scanf("%d %d %d",&work[i].a,&work[i].b,&work[i].d);
			work[i].x=0;
		}
		sort(work+1,work+n+1,cmp2);
		double deadline=0,ans=0;
		while (!q.empty()) q.pop();
		for (int i=1;i<=n;i++)
		{
			q.push(work[i]);
			deadline+=work[i].b;
			while (deadline-work[i].d>1e-9)
			{
				int x=deadline-work[i].d;
				rec tmp=q.top();q.pop();
				if (tmp.b-tmp.x-x>1e-9)
				{
					ans+=(double)x/tmp.a;
					tmp.x+=x;
					deadline-=x;
					q.push(tmp);
				}
				else
				{
					ans+=(double)(tmp.b-tmp.x)/tmp.a;
					deadline-=tmp.b-tmp.x;
				}
			}
		}
		printf("%.2f\n",ans);
	}
	return 0;
}

数据结构与算法_C++[MP4] 猎豹网校VC++ MFC 经典教程 基础篇[MP4] 猎豹网校Java 零基础入门[MP4] 猎豹网校 游戏编程快速入门[MP4] 猎豹网校 网店赢家淘宝网新手开店[MP4] 猎豹网校 透测测试 系统安全测试[MP4] 猎豹网校 淘宝卖家网店美工[MP4] 猎豹网校 搜索引擎搜索技巧[MP4] 猎豹网校 数据结构与算法_Java语言[MP4] 猎豹网校 数据结构与算法_C语言[MP4] 猎豹网校 软件测试快速入门[MP4] 猎豹网校 猎豹网校数据结构与算法_C#语言[MP4] 猎豹网校 快学快用 Excel 应用大全 中级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 高级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 初级教程[MP4] 猎豹网校 快速掌握_会声会影_标准[MP4] 猎豹网校 快速掌握 QTP 测试工具[MP4] 猎豹网校 快速掌握 Python 学习手册[MP4] 猎豹网校 快速掌握 Python 系统管理[MP4] 猎豹网校 快速掌握 Python 基础教程[MP4] 猎豹网校 快速掌握 Python Django 1.5 网页开发[MP4] 猎豹网校 快速掌握 MATLAB 经典教程[MP4] 猎豹网校 快速掌握 LoadRunner 测试工具[MP4] 猎豹网校 快速掌握 C# 学习指南[MP4] 猎豹网校 快速掌握 Access VBA[MP4] 猎豹网校 快速学会_Windows 命令行批处理脚本[MP4] 猎豹网校 快速学会_Shell 脚本经典教程[MP4] 猎豹网校 快速学会 VB.NET 经典教程[MP4] 猎豹网校 快速学会 TclTk 开发指南[MP4] 猎豹网校 快速学会 Perl 实用教程[MP4] 猎豹网校 快速学会 Perl 入门经典[MP4] 猎豹网校 快速通过_计算机二级_公共基础知识[MP4] 猎豹网校 快速通过_计算机二级_VFP[MP4] 猎豹网校 快速通过_计算机二级_VB[MP4] 猎豹网校 快速通过_计算机二级_Java[MP4] 猎豹网校 快速通过_计算机二级_C语言[MP4] 猎豹网校 快速通过_计算机二级_C++[MP4] 猎豹网校 黑客攻防 网站攻防修炼[MP4] 猎豹网校 黑客攻防 木马揭秘[MP4] 猎豹网校 黑客攻防 蜜罐[MP4] 猎豹网校 高级软件测试分析师[MP4] 猎豹网校 大家可以学的C语言[MP4] 猎豹网校 Windows程序设计 初级课程(二)[MP4] 攻防[MP4] 北风网 C++反汇编基础:Win32平台(逆向实例、动态调试实例)[MP4] 安卓 Android 游戏编程入门(上)[MP4] Word排版高级技巧[MP4] Word 零基础入门[MP4] Windows程序设计 初级课程(一)[MP4] Windows Api学习指南[MP4] VisualSVN Subversion[MP4] Visual C# 入门经典[MP4] VC++ MFC快速提高[MP4] VC++ MFC快速入门[MP4] VC++ MFC快速进阶[MP4] Unity 3D 游戏开发经典教程[MP4] Unity 3D 游戏高级教程[MP4] SQL Server 数据库[MP4] Silverlight 经典教程[MP4] Qt 中级课程 (上)[MP4] Python系统管理[MP4] PS抠图秘技[MP4] ppyygg PowerPoint(PPT) 达人进阶[MP4] PHP基础教程[MP4] PHP和MySQL Web开发 高级教程[MP4] PHP和MySQL Web开发 初级教程[MP4] PHP 程序设计[MP4] PHP Zend 开发实战[MP4] PHP Ajax 经典教程[MP4] Oracle 数据库[MP4] MySQL 数据库[MP4] Lua 经典教程[MP4] Linux 轻松入门[MP4] Linux C 基础教程[MP4] JSP 实用教程[MP4] jQuery 快速入门[MP4] Java设计模式[MP4] JavaScript 经典教程[MP4] Java 编程思想 中级教程[MP4] Java 编程思想 高级教程[MP4] Java 编程思想 初级教程[MP4] HTML网页设计[MP4] Flash CS5 经典教程[MP4] Flash ActionScript 经典教程MP4] Flash ActionScript 基础教程MP4] Excel 零基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值