題解 CJOJ1371 IOI2002 任務安排

2022-07-02 19:06:09 字數 1221 閱讀 1135

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。

乙個數,最小的總費用。

5 1 

1 3 

3 2 

4 3 

2 3 

1 4動態規劃 ,斜率優化

考慮dp。

設t[i]為完成時間的字尾和,y[i]為所需費用的字尾和。

那麼dp陣列h[i]就為min(h[i],h[j]+y[i]*(t[i]-t[j]+m)),m為題中所述s。

最後輸出h[1]即可。

1 #include 2

#define int long long34

using

namespace

std;

56 inline int

read()716

17while(c>='

0' && c<='9'

)182223

return f*x;24}

2526

int n,m,d[5005],s[5005],t[5005],y[5005],h[5005

],sum,ans;

2728

signed main()

2939

40for(register int i=n; i; i--)

4146

47 memset(h,0x3f,sizeof

(h));

4849 h[n+1]=0;50

51for(register int i=n; i; i--)

5257}58

59 printf("

%lld

",h[1

]);60

61return0;

62 }

1月13日題解

題意 輸入n,a,b。再輸入n個數p1,p2,pn。有兩個集合a和b,這n個數中如果x屬於集合a,a x也必須屬於集合a 如果x屬於集合b,b x也必須屬於集合b。如果能分為兩個集合的話,輸出 yes 並輸出每個元素屬於集合a還是b,0表示屬於集合a,1表示屬於集合b。思路 先假設存在一種合理的方案...

省選模擬13 題解

每個人渴望與乙個人當同桌。容易發現這個關係形成內向基環樹森林。問題轉化為求基環樹森林的最大匹配。任意選一條環上的邊,分別嘗試該邊為匹配邊 非匹配邊即可。乙個常用的但想不到的東西 將每種顏色出現次數的差值為定值,轉化為對顏色序列差分後相等。然後暴力的做法是列舉2 8,表示答案出現在指定的顏色集合中,分...

運輸層課後第13題解析

問題 乙個udp使用者資料的資料字段為8192位元組,在資料鏈路層要使用乙太網來傳輸,試問應當劃分為幾個ip資料報片?說明每乙個ip資料報字段長度和片偏移欄位的值 答案 6個資料字段的長度 前5個是1480位元組,最後乙個是800位元組,片偏移欄位的值分別是 0,185,370,555,740,92...