斜率優化 學習筆記

2022-07-06 16:00:11 字數 1589 閱讀 5220

目錄update:文章已更新

板子題題目傳送門

題目描述

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

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

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

輸入格式

第一行乙個正整數 \(n\) 。

第二行是乙個整數 \(s\) 。

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

輸出格式

乙個數,最小的總費用。

輸入輸出樣例

輸入 #1

5

11 3

3 24 3

2 31 4

輸出 #1

153
說明/提示

【資料範圍】

對於 \(100\%\) 的資料,\(1\le n \le 5000\) ,\(0 \le s \le 50\) , \(t_i,f_i\le 100\)

【樣例解釋】

如果分組方案是 \(\,\,\\) ,則完成時間分別為 \(\\) ,費用 \(c=15+10+30+42+56\) ,總費用就是 \(153\) 。

演算法理解

其實斜率優化是乙個數學建模。

前置知識:平面直角座標系上的直線。

演算法解析

因為講的是斜率優化,所以推dp式子的過程不再贅述了,不會的可以點這裡,包教包會。

為了方便敘述,我們令第 \(i\) 個產品的時間為 \(t_i\) , 係數為 \(c_i\) ,啟動時間 \(s\) 。為了方便進行兩個陣列區間和的運算,我們將 \(t,c\) 兩個陣列做一遍字首和,得到 \(sumt,sumc\) 兩個陣列。

令前 \(i\) 個的答案為 \(f_i\) ,初值為 \(f_0=0\) 。

不難得到dp式:

\[f_i=min_

if(flag) return -sum;

return sum;

}int n;

ll t[maxn],c[maxn];

ll sumt[maxn],sumc[maxn];

ll f[maxn],s;

int que[maxn],head,tail;

double js(int x,int y)

int main()

f[0]=0;

head=0; tail=0;

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

printf("%lld",f[n]);

return 0;

}

斜率優化學習筆記

目錄第二類斜率優化 注意事項 q a 例題 hnoi玩具裝箱 由題意我們可以馬上得到dp方程 dp i displaystyle min sum x 為字首和 很可惜,這個解法是 o n 2 的,無法ac 但是可以在當年騙很多分?接下來的文章中我們會用幾個簡稱 f i sum i i c 1 l 優...

斜率優化 學習筆記

前言 寒假yousiki講過斜率優化,但完全沒有聽懂。現在文化課解析幾何也學了不少,終於能做一些題了。有時候我們列出dp方程會得到形如這樣的式子 f i max min w i 1 leq j我們變換一下形式 2 a i b j f i a i 2 w i f j b j 2 仔細一看,上面的等式可...

斜率優化 學習筆記

事實上斜率優化是專門用來處理這樣一類 dp 式子的 dpi ai maxj 1i 1 bj cj basei 窩萌嘗試把上式中的 bj cj 和 basei 等價成 xj yj 和 ki 並把它們丟到乙個平面上,然後它萌就會變成一堆點 xj,yj 畫一條過他們的直線,類似於 y yj ki x xj...