CCF201403-5 任務調度

嗯...一個看着簡單越寫越想撞牆的題...20分棄坑...這裏寫的只是做題時候的思路,歡迎指正。


===========================原題==========================

問題描述
  有若干個任務需要在一臺機器上運行。它們之間沒有依賴關係,因此 可以被按照任意順序執行。
  該機器有兩個 CPU 和一個 GPU。對於每個任務,你可以爲它分配不 同的硬件資源:
  1. 在單個 CPU 上運行。
  2. 在兩個 CPU 上同時運行。
  3. 在單個 CPU 和 GPU 上同時運行。
  4. 在兩個 CPU 和 GPU 上同時運行。
  一個任務開始執行以後,將會獨佔它所用到的所有硬件資源,不得中 斷,直到執行結束爲止。第 i 個任務用單個 CPU,兩個 CPU,單個 CPU 加 GPU,兩個 CPU 加 GPU 運行所消耗的時間分別爲 ai,bi,ci 和 di
  現在需要你計算出至少需要花多少時間可以把所有給定的任務完成。
輸入格式
  輸入的第一行只有一個正整數 n(1 ≤ n ≤ 40), 是總共需要執行的任 務個數。
  接下來的 n 行每行有四個正整數 ai, bi, ci, di(ai, bi, ci, di 均不超過 10), 以空格隔開。
輸出格式
  輸出只有一個整數,即完成給定的所有任務所需的最少時間。
樣例輸入
3
4 4 2 2
7 4 7 4
3 3 3 3
樣例輸出
7
樣例說明
  有很多種調度方案可以在 7 個時間單位裏完成給定的三個任務,以下是其中的一種方案:
  同時運行第一個任務(單 CPU 加上 GPU)和第三個任務(單 CPU), 它們分別在時刻 2 和時刻 3 完成。在時刻 3 開始雙 CPU 運行任務 2,在 時刻 7 完成。

===========================思路==========================

首先讀完題發現的第一點: 

【加上GPU未必會加快速度,雙CPU也不見得會顯著提高效率。】

其次想到的就是雙CPU時是否使用GPU完全沒關係...畢竟兩個CPU都是你的了...


爲了方便我們約定一下符號縮寫:

1 單CPU處理SCSingle CPU

2 雙CPU處理DCDouble CPU

3 單CPU帶GPUSCGSingle CPU and GPU

4 雙CPU帶GPUDCGDouble CPU and GPU

5 不做任何處理PASS


關於每一時刻可能有的狀態及決策:

1、單CPU空閒,GPU佔用:①SC②PASS

2、單CPU空閒,GPU空閒 :①SC②SCG③PASS

3、雙CPU空閒:①SCG+SC②SC+SCG③SC+SC④DC(G)

4、雙CPU佔用:①PASS


關於SCG+SC ≠ SC+SCG 的情況舉個例子就是


假如按某個規則取出的兩個任務:

SCSCG

A108 SC(A)+SCG(B) = 11

B41 SCG(A)+SC(B) = 12

雖然和去出任務的條件有關,但...缺的就是很好的取出條件


第一次...決定用模擬+貪心

然後就是痛苦的掙扎= =、到底該如何決策雙CPU空閒的時候用SC(G)+SC還是DC???


剛開始把DC情況分成了以下兩種:




很明顯只有在max(SC1, SC2) < DC1 + DC2 的時候應該使用DC,但考慮到後來的任務SC填補上缺口之後結果可能會出現變化,所以只有在當前判定的集合是餘下全集的時候比較好用。

後來按照(2 * DC > SCG)的標準嘗試判定了一下發現也可以舉出特別多反例,於是放棄。

模擬思路的最後掙扎是根據分類排了一個優先順序:

① DC集:按SCG與DC差值降序排列

② SCG集:按SC與SCG差值降序排列

③ SC集:按SC值升序排列

想起來之前的最小代價歸併問題,想要打個flag之後從三個集合裏按順序取符合條件的,勤勤懇懇寫了一大圈最後竟然寫成了一個剪枝的思路,判別DC的方法還是沒找到。(期間也嘗試了最後一個任務再判斷是否DC,跑得更遠)


之後就是第二個坑:深搜+剪枝,主要思路就是嘗試了上面所有可能...

剪枝的地方: ① 時間已到達目前最小完成時間 - 返回

② 給定任務嘗試順序

③ 設定工作上限

④ 判斷是否等待以嘗試DC情況

⑤ 合併 SCG與SC混合情況(對比,不再分叉)

⑥ 有限度的嘗試SC+SC情況

⑦ 兩個CPU同時工作時直接跳轉

... ...


寫題用的時間太長,改到最後代碼都亂了,超時的問題倒是解決了,又不知道哪裏出錯了。可能本來的思路就有漏洞或者直接跑歪了,找遍全世界也沒個答案(連官方都沒標程醉了...)。剪枝肯定還有能剪的地方,目前來看貪心也貪的不夠,代碼就不貼了,有大神路過跪求AC代碼...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章