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),
假设不是按升降序排列,那么必然存在(小,小),(大,大)的组合,交换使其成为(小,大),(大,小),不会提高上限。这样交换一定次数可以成为升降序排列。
总结:
这题关键是平均贪心思想的运用。还有要想到把一个顺序加工的过程转化为从两边向中间加工。
462



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



