P2365 任務安排

2022-08-02 19:30:17 字數 1122 閱讀 5002

n個任務排成乙個序列在一台機器上等待完成(順序不得改變),這 n個任務被分成若干批,每批包含相鄰的若干任務。

從零時刻開始,這些任務被分批加工,第 i個任務單獨完成所需的時間為 ti​。在每批任務開始前,機器需要啟動時間 s,而完成這批任務所需的時間是各個任務需要時間的總和(同一批任務將在同一時刻完成)。

每個任務的費用是它的完成時刻乘以乙個費用係數 f i。請確定乙個分組方案,使得總費用最小。

第一行乙個正整數 n。

第二行是乙個整數 s。

下面 n行每行有一對數,分別為 ti和 fi,表示第 i個任務單獨完成所需的時間是 ti及其費用係數 fi。

乙個數,最小的總費用。

輸入

511

3324

3231

4

輸出

153

dp[i]表示完成前i個任務所需的最小費用,用time[i]表示前i項任務所需的時間,用money[i]表示前i項任務一共的費用係數。

如果在完成第j項任務是啟動一次機器,後面的所有任務完成的時刻都要加上s,所以每啟動一次機器的費用為s * (money[n] - money[j- 1 ]);

如果把第j項任務和第i項任務和在一起做,則它們的完成時刻為time[i],所以費用為time[i] * (money[i] - money[j - 1])。

別把陣列名設定成time會衝突

#include using

namespace

std;

const

int maxn = 0x3f3f3f3f

;int dp[100001

];int n , time[100001] , money[100001

] , s;

intmain ()

for (int i = 1; i <= n; i++)

for (int j = 1; j <= i; j++)

dp[i] = min(dp[i] , dp[j - 1] + s * (money[n] - money[j - 1]) + time[i] * (money[i] - money[j - 1

]));

cout

}

P2365 任務安排 題解

p2365 任務安排 這道題有弱化版和強化版,這道題是弱化版 我們很容易能想到乙個 dp 方程 f p i 表示前 i 個取了 p 段的最優解,於是轉移方程 f p i min f p 1 j st i p ast s ast sf i sf j 這個轉移方程是 o n 3 的考慮怎麼優化 對於每次...

P2365 任務安排 batch 動態規劃

batch 輸入檔案 batch.in 輸出檔案 batch.out 簡單對比 時間限制 1 s 記憶體限制 128 mb 題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這 n個任務被分成若干批,每批包含相鄰的若干任務。從時刻 0開始,這些任務被分批加工,第 i個任務單獨完成所需...

動態規劃 洛谷P2365 任務安排

n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務將在同一時刻完成 每個任務的...