这个题是老师在算法课上布置的一道大作业有关贪心算法的题目,说实话,刚开始拿到这道题时,读错了题,导致程序只两个测试用例通过,最后重新读了这道题,改了程序之后才通过全部用例。
题目描述
n个题目,每个题目都有相应的分数和截止日期,各个题目的分数和截止日期可能并不相同,假设每个题目都需要一天的时间去完成,这期间不能完成其他题目,请你设计算法指定题目的完成计划,从而使得分最大
题解
我们用结构体去保存这组数据,一种思路是:向后搜索,看一下后面有没有跟当前题目的截止日期一样的,如果有,我们就比较一下谁更大,一直到最后,之后从第二个继续开始搜索,但是这种方法非常慢,时间复杂度是O(n*n)每次都要查找。想到的另一种思路是将截止日期一样的聚在一起,也就是放在一个块里,将分数进行排序,选择截止日期相同,但是分数大的数据。
截止日期是i的问题如果都已经确定是否要做,那么截止日期是i+k的问题是否选择做是可以确定的,比如说数据 1 3 5 7 8 9 10 11,如果可以确定1357中哪些需要做,不做,那么截止日期是8的问题是否要做就可以判断出来,前面的问题假设选择n个要做,还剩余8-n天可以做,如果8-n>0,说明还有剩余的天数可以安排截止日期是8的问题取做,前面做的n个问题中的分值最小值比截止日期8的小就换,否则不换。
- 对于当前i数据来说,如果存在可用时间,那么第i个问题一定解决
- 对于当前i数据来说,如果不存在可用时间