USACO Job Processing

本文详细解析了USACO4.2作业调度问题,通过三个关键引理阐述了如何构造单个最优解及证明其正确性。引理1介绍了每次将作业分配给延迟加处理时间最小的机器的方法;引理2利用“最优”特性归纳证明了任意第k个完成的作业比非最优方案更早完成;引理3讨论了两个数组按特定顺序排列后的最大值问题。

USACO 4.2 job processing

题目链接:  http://www.nocow.cn/index.php/Translate:USACO/job

这题很经典,网上资料大多是一带而过,因此转载了一篇较详细的分析。

http://magicalcode.blogbus.com/logs/37193487.html

若有疑问的地方,可参照本文中引理的证明。

 

引理1:题目第一问,单个最优解的构造(即让最晚零件结束的时间最早)

每次把零件安排在延迟+加工时间最少的机器上。证明采取反证,安排过去一定得到另一个最优解。

 

引理2

要证明一个性质,假设如下图所示的流程图是最优解,一定可以找到一个为两边各自为最优的情况。

1WWWWWWWAAAAAAA                BBBBBBBW

2WWWWAAAA                       BBBBBWWWWW

3WWWWWWWWWWWAAAAAAA             BBBB

4AAAAAAA             BBBBBBBWWWWWWWWW

 

这是由“最优”的性质决定的。“最优”意味着对任意N个产品,最晚的结束时间是最早的(引理1)。因此取 N=12…k,可以归纳证得任意第k个结束的产品,都比非最优方案结束的早。因此不会发生重叠现象。

这样把问题转化为了最优解的排列问题。

 

引理3

对于两数组a[n],b[n], a[n]按升序排列,b[n]按降序排列,设数组c[i] = a[i] + b[i],则将anbn分别重新排列后,再次得到 d[i] =a`[i]+b`[i],则 max(ci) <= max(di)

假设不是按升降序排列,那么必然存在(小,小),(大,大)的组合,交换使其成为(小,大),(大,小),不会提高上限。这样交换一定次数可以成为升降序排列。

 

 

总结:

这题关键是平均贪心思想的运用。还有要想到把一个顺序加工的过程转化为从两边向中间加工。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值