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=1,2…k,可以归纳证得任意第k个结束的产品,都比非最优方案结束的早。因此不会发生重叠现象。
这样把问题转化为了最优解的排列问题。
引理3:
对于两数组a[n],b[n], a[n]按升序排列,b[n]按降序排列,设数组c[i] = a[i] + b[i],则将an和bn分别重新排列后,再次得到 d[i] =a`[i]+b`[i],则 max(ci) <= max(di),
假设不是按升降序排列,那么必然存在(小,小),(大,大)的组合,交换使其成为(小,大),(大,小),不会提高上限。这样交换一定次数可以成为升降序排列。
总结:
这题关键是平均贪心思想的运用。还有要想到把一个顺序加工的过程转化为从两边向中间加工。
本文详细解析了USACO4.2作业调度问题,通过三个关键引理阐述了如何构造单个最优解及证明其正确性。引理1介绍了每次将作业分配给延迟加处理时间最小的机器的方法;引理2利用“最优”特性归纳证明了任意第k个完成的作业比非最优方案更早完成;引理3讨论了两个数组按特定顺序排列后的最大值问题。
161

被折叠的 条评论
为什么被折叠?



