Ch5501 環路運輸 環形處理dp

2021-08-25 06:03:08 字數 737 閱讀 5693

有n座倉庫,然後是乙個環,兩個倉庫之間的運輸距離為ai

+aj+

dis(

i,j)

a i+

aj+d

is(i

,j

)dis

(i,j

)=mi

n(|i

−j|,

n−|i

−j|)

d is

(i,j

)=mi

n(|i

−j|,

n−|i

−j|)

我們將a複製乙份放在原陣列後面,然後就變成了2*n的線性。然後我們列舉i,之後i和j的距離為ai

+aj+

i−j ai+

aj+i

−j

,於是我們可以找到在n/2範圍之內的最小的aj

−ja j−

j,於是我們可以用單調佇列維護一下就好了。

#include

#include

#include

#define n 2000010

using

namespace

std;

int n,a[n],maxs;

deque

q;int main()

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

printf("%d",maxs);

}

CH5501 環路運輸 環形 單調佇列

ch description 在一條環形公路旁均勻地分布著n座倉庫,編號為1 n,編號為 i 的倉庫與編號為 j 的倉庫之間的距離定義為 dist i,j min i j n i j 也就是逆時針或順時針從 i 到 j 中較近的一種.每座倉庫都存有貨物,其中編號為 i 的倉庫庫存量為 ai.在 i ...

CH 5501 環路運輸 DP 單調佇列

n nn個在乙個環上的倉庫,兩兩之間運貨的代價是a i a j m in i j n i j a i a j min i j n i j a i a j min i j n i j 求最大代價。環上的dp固然不好做,可以先把環拆成鏈,再拷貝乙份。成為一條長度為2n2n 2n的鏈。for int i ...

CH 5501 環路運輸 DP 單調佇列

nn 個在乙個環上的倉庫,兩兩之間運貨的代價是a i a j m in i j n i j a i a j min i j n i j 求最大代價。環上的dp固然不好做,可以先把環拆成鏈,再拷貝乙份。成為一條長度為2n2 n的鏈。for int i 1 i n i 那麼接下來的dp就再鏈上dp就可以...