其他分享
首页 > 其他分享> > 截止日期

截止日期

作者:互联网

贪心算法:截止日期问题

【问题描述】

某学科老师布置了n个题目,每个题目都有相应的分数及截止日期。各个题目的分数及截止日期可能并不相同。对某题目而言,如果在该题目的截止日期前完成则可获得对应的分数,否则无法得分。假设每个题目均需要花费一天的时间来完成,这期间无法完成其他题目。请你设计算法指定题目的完成计划,从而使总的得分最大。

下面给出一个包含了7个题目及相应的分数、截止日期的实例:
在这里插入图片描述
对该实例而言,得分最大的作业完成方案为花费4天时间依次完成题目2,6,3,7。得分为15。
【输入形式】

输入数据第一行为一个整数n (0 <= n <= 10000), 表示题目数目
之后n行各有两个整数, 第i行为 pi, di (1 <= pi, di <= 10000),分别表示第i个题目的分数和截止时间

【输出形式】

一个整数, 为当前条件下的最大得分

【样例输入】

4 
50 2 
10 1 
20 2 
30 1

【样例输出】

80

【问题解答】

  1. 基于贪心算法的思路,一个大问题首先分解为各个小问题,最优解由局部最优解得来,小问题之间没有相互关联。

  2. 此题中输入的日期有个最大值,即最晚的截止日期,例如样例中的2,即为本题的截止日期。

  3. 假设当前为第二天,那么第二天及以后日期截止的问题都可以在第二天完成,而不能完成第一天的问题。

  4. 此题中可以按天数依次放入问题。如果按日期从前往后(先放第一天,再放第二天……)放入数据,则需要考虑以后的分数对之前的分数影响。即每个子问题不独立。所以,我们采用从后往前放数据的方式。从当前第n天放入第n天截止及截止日期大于n的问题,选分值最大的放入其中,同时删除该值。

  5. 以问题截止日期(及截止日期数组中的最大值)开始,递减的顺序到第一天依次把所有的日期全部放入分值最大的问题,即为本题的最优解。

标签:分数,题目,问题,日期,放入,截止
来源: https://blog.csdn.net/iamyehua/article/details/117171343