給定乙個長度為
n n
的環形序列
a' role="presentation">a
a,定義di
st(i
,j)=
min(
|i−j
|,n−
|i−j
|)d is
t(i,
j)=m
in(|
i−j|
,n−|
i−j|
),求出最大的 ai
+aj+
dist
(i,j
) ai+
aj+d
ist(
i,j)
破環為鏈
判斷長度是否超過n/
2 n/2
(因為這樣)
然後題目就可以轉換乘最大子序和的問題了
用單調佇列優化一下即可
#include
#include
#include
using
namespace
std;int a[2000001],n,ans;
deque
q;int read()
signed main()
printf("%d",ans);
}
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 ...
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 單調佇列
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就可以...