Tyoj1098 任務安排

2021-07-31 09:20:18 字數 958 閱讀 2865

n個任務排成乙個序列在一台機器上等待完成(順序不得改變),這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和(同一批任務將在同一時刻完成)。每個任務的費用是它的完成時刻乘以乙個費用係數fi。請確定乙個分組方案,使得總費用最小。

例如:s=1;t=;f=。如果分組方案是、、,則完成時間分別為,費用c=,總費用就是153。

第一行是n(1<=n<=5000);

第二行是s(0<=s<=50)。

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

乙個數,最小的總費用。

511 3

3 24 3

2 31 4

153

分組?設f[i]表示前i個所需的最短時,進行dp。

我們發現每新建乙個分組那麼會對後面的所有工作造成影響,不滿足無後效性的要求。

將影響提前計算即可。

轉移方程:

tsum[i]為前i個工作的時間和。

csum[i]為前i個工作的費用和。

那麼有:f[i]=min(0<=j#include#includeusing namespace std;

inline int read()

int n,s;

int tsum[5005],csum[5005],f[5005];

int main()memset(f,0x3f,sizeof(f));f[0]=0;

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

for(int j=i-1;j>=0;j--)

f[i]=min(f[i],f[j]+(s+tsum[i]-tsum[j])*(csum[n]-csum[j]));

cout

}

Tyvj1098 任務安排

恕我懶 分析 本蒟蒻只想到了辣雞做法 f i,j 表示前j個任務分了i組,最少費用,f i,j min 發現這是o n 3 的,水不過去.於是腦洞大開想寫乙個二維的斜率優化.不知道為什麼一直wa了乙個點.於是去尋找正解,發現只需要開1維陣列就夠了,驚呆我了.用f i 表示從第i個任務開始做的最小費用...

TYVJ 1098 任務安排

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

TYVJ P1098 任務安排

目錄 傳送門 很明顯的dp題,但樸素演算法的o n3 o n 3 肯定是涼掉的 所以我們要考慮加上一些優化使得時間複雜度降下 這裡我們引用一種新思路 費用提前計算 之所以這麼說,是因為我們可以只考慮啟動時間對後續任務產生的影響 include include include include incl...