任务描述
本关任务:小张最近很忙,记事本里有n件事情等待处理,每件事处理完毕后,能得到不同的奖励,而且都有一个截止日。一件事处理需要一整天
时间,并且小张不能同时干其他事情。请你替小张安排一个事情处理的时间表,争取获得最大的奖励。
相关知识
为了完成本关任务,你需要掌握:贪心算法。
编程要求
根据提示,在右侧编辑器编写代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:第一行输入整数n,表示n个事情。随后输入n行,每行包括一个事情的截止日(不大于n)和处理收益。
测试输出:输出最大的总收益。
例
测试输入:
5
2 5
2 7
2 6
2 8
3 3
预期输出:
18
C语言版
#includeint 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; }



