截止日期JAVA版

这篇博客介绍了如何使用贪心算法解决一个关于截止日期和分数最大化的题目。博主分享了在错误理解题目后修正的过程,提出了将相同截止日期的题目归类并按分数排序的优化思路,以降低时间复杂度。程序代码经过验证,成功通过了所有测试数据,平均内存占用55.463K,平均CPU时间为0.45201S。
摘要由CSDN通过智能技术生成

这个题是老师在算法课上布置的一道大作业有关贪心算法的题目,说实话,刚开始拿到这道题时,读错了题,导致程序只两个测试用例通过,最后重新读了这道题,改了程序之后才通过全部用例。
题目描述
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的小就换,否则不换。

  1. 对于当前i数据来说,如果存在可用时间,那么第i个问题一定解决
  2. 对于当前i数据来说,如果不存在可用时间
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值