經典環形問題。
我們採取長鏈乘二的方法(這一題另一種方法不好處理)。
這題麻煩的點在於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/ai+aj+i-j
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 ...