week4

贪心算法

贪心算法有两种证明方法:

  • 反证法 :交换项目中任意两个或者相邻两个元素,答案不会变的更好,则目前是最优解。

  • 归纳法:

  • 排序解法:用排序法常见的情况是输入一个包含几个权值的数组,通过排序然后遍历模拟计算的方法求出最优值。

  • 后悔解法:思路是无论当前的选项是否最优都接受,然后进行比较,如果选择之后不是最优了,则反悔,舍弃掉这个选项;否则,正式接受。如此往复

区间调度问题

请添加图片描述

  • 选择最早结束时间 ,或者最晚开始时间

  • 从左向右选,一开始的选择范围是,是(-∞,+∞),每选择一个区间后就变成了[Fi ,+∞),让这个范围尽可能越大越好,所以每次要选结束时间最早的,这样选完之后剩下的范围最大

工作调度

请添加图片描述

请添加图片描述

国王游戏

请添加图片描述

  • 设大臣i 和大臣i+1 分到的金币分别是 s / b i ( s ∗ a i ) / b i + 1 s/b_i \quad (s*a_i)/b_{i+1} s/bi(sai)/bi+1 ,如果交换大臣i 和大臣 i+1的位置,对其他大臣获得的金币并没有影响。
  • 对于两个大臣,考虑是否要交换两个人的位置,如果要交换两个人的位置, m a x ( s b i , s ∗ a i b i + 1 ) max(\frac{s}{b_i},\frac{s*a_i}{b_{i+1}}) max(bis,bi+1sai) 交换后的值 m a x ( s b i + 1 , s ∗ a i + 1 b i ) max(\frac{s}{b_i+1},\frac{s*a_{i+1}}{b_{i}}) max(bi+1s,bisai+1)
    即 求 m a x ( b i + 1 , a i ∗ b i ) 和 m a x ( b i , a i + 1 ∗ b i + 1 ) max(b_{i+1},a_i*b_i) 和 max(b_i,a_{i+1}*b_{i+1}) max(bi+1,aibi)max(bi,ai+1bi+1),判断是否可以交换。
    直接用这个条件进行快排。

摆放垃圾桶

请添加图片描述

  • 可以用树状数组用来统计,某一路段已经放了多少垃圾桶
  • 在处理左侧段时,垃圾桶尽可能往右放,我们按照 右端从小到大的顺序处理。

AC

看电影

请添加图片描述

AC

johnson 法则

问题描述

n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。

直接上链接:
https://www.cnblogs.com/fashpoint/p/11309412.html

结论: 若 i 在j 前面比较优, 则 min(bj,ai) <= min(bi,aj)

划分石头

请添加图片描述

二分答案,
考虑一下,如果限制每段石头和小于 w, 如果w太大,能分的段限制少,可以有更少的段,如果w太小,那么只能更多的段,切要求和最小。
我们二分 w ,寻找能满足 m段的最小值。

捡贝壳

请添加图片描述

二分答案,体积尽可能大

使用前缀和,来求解平均体积满足要求 W 的段是否存在。

vi, vi+1,…,vj 的平均体积 (vj+…+vi)/(j-i+1) > W
vi - w + vi+1 - w + vi+2 -w + … + vj - w > 0

如果前缀和为 a[i] = a[i-1] + v[i] - w
则,vi - w + vi+1 - w + vi+2 -w + … + vj - w = a[j] - a[i-1]

因此,如果有 aj - ai > 0 ,j - i >= m ,则证明隔了至少m个元素,平均体积满足要求。

难点:前缀和数组不好构造

因此,如果有 aj - ai > 0 ,j - i >= m ,则证明隔了至少m个元素,平均体积满足要求。

难点:前缀和数组不好构造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值