截止日期
作者:互联网
贪心算法:截止日期问题
【问题描述】
某学科老师布置了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
【问题解答】
-
基于贪心算法的思路,一个大问题首先分解为各个小问题,最优解由局部最优解得来,小问题之间没有相互关联。
-
此题中输入的日期有个最大值,即最晚的截止日期,例如样例中的2,即为本题的截止日期。
-
假设当前为第二天,那么第二天及以后日期截止的问题都可以在第二天完成,而不能完成第一天的问题。
-
此题中可以按天数依次放入问题。如果按日期从前往后(先放第一天,再放第二天……)放入数据,则需要考虑以后的分数对之前的分数影响。即每个子问题不独立。所以,我们采用从后往前放数据的方式。从当前第n天放入第n天截止及截止日期大于n的问题,选分值最大的放入其中,同时删除该值。
-
以问题截止日期(及截止日期数组中的最大值)开始,递减的顺序到第一天依次把所有的日期全部放入分值最大的问题,即为本题的最优解。
标签:分数,题目,问题,日期,放入,截止 来源: https://blog.csdn.net/iamyehua/article/details/117171343