第一问比较简单,用贪心做就可以了。用now[i]记录A中机器工作的时间,初始时为0。每次使当前最大工作时间最小,即找到一个j使得
now[j]+t[j]最小,其中t是A中机器j完成一次操作的时间。让机器j完成这次操作,更新now[i],同时记录第i件工作被完成的时间
fin[i]。
贪心的证明比较容易,这里就不说了(反证)。
第二问初看似乎无从下手,我们不妨换个角度,把A和B独立开,换句话说,等A工作全部结束后B工作才开始,那么B和A是一样的,用贪心求出这时每件工作被完成的时间sta[i]。
fin和sta中的数是单调递增的,我们设想一下,把fin中最大的和sta中最小的数对应,记做某件工作完成的时间(因为所有工作都是一样的),fin中次大的和sta中次大的数对应,记做另一件工作完成的时间,依此类推。去所有的完成时间最大的就是问题二的解。
单调性
这个图可能更形象一些:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://photo.hexun.com/p/2006/0131/9642/b_15D7B52B56948D55.jpg" alt="查看更多精彩图片" border="0">