1. 程式人生 > 其它 >C++中一些常見的問題

C++中一些常見的問題

有 N 個任務排成一個序列在一臺機器上等待執行,它們的順序不得改變。
機器會把這 N 個任務分成若干批,每一批包含連續的若干個任務。
從時刻 0 開始,任務被分批加工,執行第 i 個任務所需的時間是 Ti。
另外,在每批任務開始前,機器需要 S 的啟動時間,故執行一批任務所需的時間是啟動時間 S 加上每個任務所需時間之和。
一個任務執行後,將在機器中稍作等待,直至該批任務全部執行完畢。
也就是說,同一批任務將在同一時刻完成。
每個任務的費用是它的完成時刻乘以一個費用係數 Ci。
請為機器規劃一個分組方案,使得總費用最小。

前i個任務分成j批:

\[f(i,j)=\min_{0\le k < j } \{ f(k,j-1)+(S*j+sum(i))*(sumC(i)-sumC(k)) \} \]

由於我們只關注f(n)的正確性 不關注其他 所以我們可以考慮把啟動時間造成的影響提前加入到狀態中進行計算
這樣仍然滿足最優子結構:
因為從i轉移到j的時候 在j點啟動的時間是固定的 最終累加到n的時候是確定的
f的含義可以理解為把前i個任務分成若干批次,並且加上每一批造成的後續影響的最小費用

\[f(i)=\min_{0\le j < i} \{ f(j)+sumT(i)*(sunC(i)-sumC(j) ) +S*(sumC(N)-sumC(j))\} \]