dp 斜率優化 例題 擺渡車

2021-09-28 12:26:32 字數 2625 閱讀 1874

luogup5017

noip (j.t4)

鳴謝:不認識的大佬的題解

有 n

nn 名同學要乘坐擺渡車從人大附中前往人民大學,第 i

ii 位同學在第t

it_i

ti​分鐘去 等車。只有一輛擺渡車在工作,但擺渡車容量可以視為無限大。擺渡車從人大附**發、 把車上的同學送到人民大學、再回到人大附中(去接其他同學),這樣往返一趟總共花費m

mm 分鐘(同學上下車時間忽略不計)。擺渡車要將所有同學都送到人民大學。

凱凱很好奇,如果他能任意安排擺渡車出發的時間,那麼這些同學的等車時間之和最小為多少呢?

注意:擺渡車回到人大附中後可以即刻出發。

f [i

]f[i]

f[i]

表示以i

ii時間開始的最小等待總時間

s [i

]s[i]

s[i]

時間字首和

g [i

]g[i]

g[i]

個數字首和

f [i

]=mi

n(f[

j]+i

×(g[

j]−g

[i])

−(s[

i]−s

[j])

)(1≤

j≤i−

m−1)

f[i]=min(f[j]+i\times(g[j]-g[i])-(s[i]-s[j])\ )(1\leq j \leq i-m-1)

f[i]=m

in(f

[j]+

i×(g

[j]−

g[i]

)−(s

[i]−

s[j]

))(1

≤j≤i

−m−1)o(

t2

)o(t^2)

o(t2

)awsl

常數不管

>f[

i]=f

[j]+

i×g[

j]+s

[j

]->f[i]=f[j]+i\times g[j]+s[j]

−>f[

i]=f

[j]+

i×g[

j]+s

[j]−

>f[

j]+s

[j]=

−i×g

[i]+

f[i]

->f[j]+s[j]= -i \times g[i] +f[i]

−>f[

j]+s

[j]=

−i×g

[i]+

f[i]

k =−

ik=-i

k=−i

(注意是負數)

x =g

[j

]x=g[j]

x=g[j]

b =f

[i

]b=f[i]

b=f[i]

y =f

[j]+

s[j]

y=f[j]+s[j]

y=f[j]

+s[j

]−>y=

kx+b

->y=kx+b

−>y=

kx+b

(找i

ii的決策點時,f

if_i

fi​若能o(1

)o(1)

o(1)

算出,當常數處理,f

jf_j

fj​當變數)

然後斜率優化。。。

(維護凸殼,切點做最值決策點,加入隊中用斜率維護凸殼)

o (t

)o(t)

o(t)

#include

#define y(x) (dp[x]+s[x])

//一般手推

#define x(x) (g[x])

//推不來還是暴力dp吧

#define ll long long

using

namespace std;

const

int n=

4e6+

10,inf=

1e9;

int n,m;

int s[n]

,g[n]

;int dp[n]

;int z[n]

,p1,p2;

doublekt(

int i,

int j)

int ans=inf;

intmain()

for(

int i=

1;i<=maxx+m;i++

) s[i]

+=s[i-1]

,g[i]

+=g[i-1]

; p1=

1;p2=1;

for(

int i=

1;i)for

(int i=m;i<=maxx+m;i++

)printf

("%d"

,ans)

;}

斜率優化 DP

我們知道,有些dp方程可以轉化成dp i f j x i 的形式,其中f j 中儲存了只與j相關的量。這樣的dp方程我們可以用單調佇列進行優化,從而使得o n 2 的複雜度降到o n 可是並不是所有的方程都可以轉化成上面的形式,舉個例子 dp i dp j x i x j x i x j 如果把右邊...

dp斜率優化

我們知道,有些dp方程可以轉化成dp i f j x i 的形式,其中f j 中儲存了只與j相關的量。這樣的dp方程我們可以用單調佇列進行優化,從而使得o n 2 的複雜度降到o n 可是並不是所有的方程都可以轉化成上面的形式,舉個例子 dp i dp j x i x j x i x j 如果把右邊...

斜率優化DP

斜率優化主要解決的是轉移方程中存在乙個同時與i和j有關的部分時的優化問題 dp i min dp j a i b j 0 include using namespace std typedef long long ll const int maxn 1e5 5 ll a maxn b maxn dp...