USACO Job Processing

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)

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

 

 

总结:

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

你可能感兴趣的:(USACO Job Processing)