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...