贪心算法

题目:

Mike has many jobs to be completed and every job has a deadline. if mike finishes the job after the deadline, the teacher will given him a penalty. Suppose that every job always takes one day, and how should Mike arrange the order of jobs to minimize the penalty.
For example, there are 4 jobs( denoted as J) in the first line, the deadlines (denoted as D) and the penalty (denoted as P) are in the second and third lines.
J: 1 2 3 4
D: 2 3 1 2
P: 100 80 50 70
So, Mile can finish the first, the second and the fourth job, and finally his penalty is 50.
Please give an algorithm, prove the correctness and analyse the complexity.

只要按照结束时间对任务进行升序排列,得到的便是所求的解,非常简洁的贪心。正确性的证明,可以通过反证法,即假设最优的排列顺序不是升序,那么必定存在一个逆序对,交换这对任务,可以得到更优的解,这样就和假设矛盾了。

这个题比较类似 Doing Homework again

上网的比较全的解法:
https://www.cnblogs.com/s1124yy/p/6125983.html

https://blog.csdn.net/qq328691560/article/details/46925959

题意:

Ignatius有N项作业要完成。每项作业都有限期,如果不在限期内完成作业,期末考就会被扣相应的分数。给出测试数据T表示测试数,每个测试以N开始(N为0时结束),接下来一行有N个数据,分别是作业的限期,再有一行也有N个数据,分别是若不完成次作业会在期末时被扣的分数。求出他最佳的作业顺序后被扣的最小的分数。(每个作业费时一天)。

题解:

这题刚看感觉挺简单,但是要写出来确实还差点,自己的想法不是太麻烦就是有bug.
这题有些像dp,但有d不出来,又想贪心.可以拍2种序,一是用time排序,二是用score排序.
我用的是score排序: 先按照score从大到小排序,然后开始选择,让当前的课排在其time上面,如果这一天已经被占用了,那么就往前循环,有位置了就安排,没了就ans+=score。

按照score从大到小排序,如果score相同,也不用管time的排序了,因为不管这时你的time是升序还是降序,不能用的总是那几个,所以不用再排序time了.

时间复杂度

O(n2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值