藍書 289 環路運輸

2021-10-01 06:53:35 字數 1011 閱讀 2773

經典環形問題。

我們採取長鏈乘二的方法(這一題另一種方法不好處理)。

這題麻煩的點在於di必須是環形左右最小的那個距離。/

但我們分析下可知:最小的距離一定小於等於n/2.

所以我們可以把問題轉化為:在2n的長鏈裡,找到a[i]+a[j]+i-j最大,且i-j<=n

這個問題就是單調佇列的標準題目 搞搞即可。

#include using namespace std;

typedef long long ll;

//typedef __int128 ll;

//typedef unsigned long long ull;

//#define f first

//#define s second

typedef long double ld;

typedef pairpii;

typedef pairpll;

typedef pairpdd;

const ld pi=acos(-1);

const ld eps=1e-9;

//unordered_mapmp;

#define ls (o<<1)

#define rs (o<<1|1)

#define pb push_back

//#define a(i,j) a[(i)*(m+2)+(j)] //m是矩陣的列數

//pop_back()

const int seed=131;

const int m = 2e6+7;

/*int head[m],cnt;

void init()

struct edgeee[m*2];

void add(int x,int y,int z)

*/ll a[m];

ll q[m];

int main()

cout

return 0;

}

單調佇列優化DP CH 5501 環路運輸

給定乙個長度為 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 ...

Ch5501 環路運輸 環形處理dp

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

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