算法作业 - 作业调度带惩罚问题(贪心)

这篇博客探讨了如何使用贪心算法来解决作业调度带惩罚的问题。首先,对所有作业按提交时间和惩罚大小排序,然后逐一尝试填充,若当前位置为空则直接插入,否则替换并更新被替换作业的截止日期。当截止日期小于0时,表示该作业将被丢弃。

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

在这里插入图片描述
本题我的大致思路就是先对每个作业按照提交时间和惩罚大小进行排序,然后依次填数,如果该位置未填充作业就直接填充进去,如果有作业就将里面的作业提出,将本作业填进去,并将提出的作业的deadline-1,重复此过程,知道deadline < 0.则该作业就是丢弃的作业。

#include<iostream>
#include<algorithm>
#include<vector>

#define max 201

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

struct homework
{
   
	int num;
	int deadline;
	int punish;
	homework(int dead, int i,int pun) :deadline(dead), num(i), punish(pun) {
   };
};

int main(
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好的算法。对于不惩罚调度问题贪心算法通常适用于那些满足“贪心选择性质”(Greedy Choice Property, GCP)的问题,即每一步的局部最优解也保证了整体的全局最优。 在不涉及惩罚的情况下,简单地说,假设有一个任务列表,每个任务有一个开始时间和结束时间,目标是找到一种顺序来完成这些任务,使得总的完成时间最小或资源使用最少。例如,经典的作业调度问题(如 Earliest Deadline First, EDF)就符合这个场景。 下面是一个简单的 Python 代码示例,使用贪心策略解决作业调度问题(这里假设任务按照截止时间升序排列): ```python def schedule_jobs(tasks): tasks.sort(key=lambda x: x['deadline']) # 按照截止时间排序 scheduled_tasks = [] for task in tasks: if not scheduled_tasks or scheduled_tasks[-1]['end'] < task['start']: scheduled_tasks.append(task) # 如果可以插空就立即安排 return scheduled_tasks # 假设 tasks 是一个包含任务信息的列表,每个任务有 'start' 和 'deadline' 字段 # 示例任务列表 tasks = [{'name': 'task1', 'start': 2, 'deadline': 6}, {'name': 'task2', 'start': 4, 'deadline': 8}, {'name': 'task3', 'start': 1, 'deadline': 5}] scheduled = schedule_jobs(tasks) for task in scheduled: print(f"Task {task['name']} starts at {task['start']} and ends at {task['end']}") #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值