贪心 (一): HDU 6180

本文介绍了一种使用贪心算法解决任务调度问题的方法,旨在确定最少需要的机器数量和最小的运行时间总和。首先,将任务拆分为开始和结束时间点并排序。然后,遍历时间点,动态调整机器数。同时,通过维护一个栈来计算机器的待机时间。最终,算法以C语言实现,展示了解决此类问题的优雅方式。
摘要由CSDN通过智能技术生成

题目

给你 n n n 个任务, 每个任务都有一个开始结束时间, 你有很多机器, 每个机器同一时刻只能执行一个任务, 问你最少需要几台机器才能完成所有任务, 并且这些机器总共的运行时间总和的最小值是多少. (机器一旦开始使用, 知道最后完成所有任务, 中途不能关机)

思路

二分会 TLE.
将每个任务拆成两个数据: 开始时间和结束时间, 因此一共有 2 n 2n 2n 个时间点, 然后将它们排序 (时间相同, 结束的优先级更高).
遍历这些时间点, 每遇到一个任务开始的时间点, 机器数加一, 每遇到一个结束的时间点, 机器数减一, 整个过程中机器数的最大值为最少需要的机器数.
总运行时间等于所有任务的时间加所有机器的待机时间, 前者在处理输入时累加得到, 后者的计算方法是: 维护一个栈, 每遇到一个任务结束的时间点, 该时间点入栈, 没遇到一个任务开始的时间点, (如果此时栈空说明需要一个新机器), 时间点出栈, 此时的时间点便是离任务最近的机器, 二者之差即为该次任务所产生的待机时间.
这个算法很美啊…

代码 ( C语言 )

#include <stdio.h>
#include <stdlib.h>

typedef struct {
   
	int type; // 0-> start; 1-> end
	int time;
} Task;

int compare(const void* a, cons
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值