栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

贪心算法:事件安排

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

贪心算法:事件安排

事件安排

任务描述
本关任务:小张最近很忙,记事本里有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;	
}   
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号