第一問比較簡單,用貪心做就可以了。用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">