1. 程式人生 > >POJ 2376 Cleaning Shifts

POJ 2376 Cleaning Shifts

最大 記錄 開始 lean 覆蓋 排序 區間覆蓋 實現 都是

題意: 給定若幹子區間,以及目標區間,用最少的子區間覆蓋目標區間。若無法實現,輸出-1;

思路:

因為每取一個,花費都是1,所以可以使用貪心。(否則要用DP)子區間按照左端點由小到大排序,記錄已被覆蓋區間,每次找到左端點在[1~r+1]中的右端點的最大值,用有這個最大值的子區間參與覆蓋。ans++;

若中途斷檔,或者循環n之後沒有覆蓋完[1~r],則輸出-1;

證明:

輸出-1的做法易證。至於可以成立的情況,那麽必然每個格子都要染色,從左邊開始,若[1~r]已經被染色,因為已排序,所以之後的區間左端點遞增,若左端點>r+1,則此時必須要用一個區間染色了。所以必然要盡可能往右裏染色。

代碼:POJ 2376 Cleaning Shifts

POJ 2376 Cleaning Shifts