贪心算法:事件安排

贪心算法:事件安排,第1张

贪心算法:事件安排 事件安排

任务描述
本关任务:小张最近很忙,记事本里有n件事情等待处理,每件事处理完毕后,能得到不同的奖励,而且都有一个截止日。一件事处理需要一整天
时间,并且小张不能同时干其他事情。请你替小张安排一个事情处理的时间表,争取获得最大的奖励。

相关知识
为了完成本关任务,你需要掌握:贪心算法。

编程要求
根据提示,在右侧编辑器编写代码。

测试说明
平台会对你编写的代码进行测试
测试输入:第一行输入整数n,表示n个事情。随后输入n行,每行包括一个事情的截止日(不大于n)和处理收益。
测试输出:输出最大的总收益。


测试输入:
5
2 5
2 7
2 6
2 8
3 3
预期输出:
18

C语言版

#include
int deadline[1000];
int earn[1000];
int n; 

void findMaxearn(int earn[], int index){
	int cnt = 0;
	earn[0] = 0; 
	for(int i = 1; i <= n; i++) {
		if(earn[i] > earn[0] && deadline[i] >= index) {
			earn[0] = earn[i];//用earn[0]存放最大利益 
			cnt = i;//记录最大利益的位置 
		}
	}
	earn[cnt] = 0;//表示该轮已经选取最大值,避免下一轮重选
	return; 
}

void findMaxdeadline(int deadline[]){
	deadline[0] = 0;
	for(int i = 1; i <= n; i++) 
		if(deadline[i] > deadline[0]) 
		  deadline[0] = deadline[i];//用deadline[0]来存放最晚截止时间 
	return; 
}

int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) 
        scanf("%d%d", &deadline[i], &earn[i]);
 
    int sum = 0;
    findMaxdeadline(deadline);
	for(int i = deadline[0]; i >= 1; i--) {
		findMaxearn(earn, i);
		sum += earn[0];
	}
	printf("%d", sum);
	return 0;	
}   

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4949723.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-13
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存