4212 旅行規劃(travel)

2021-09-13 01:52:37 字數 1640 閱讀 8415

題意

oivillage 是乙個風景秀美的鄉村,為了更好的利用當地的旅遊資源,吸引遊客,推動經濟發展,xkszltl 決定修建了一條鐵路將當地 n

nn 個最著名的經典連線起來,讓遊客可以通過火車從鐵路起點( 1

11 號景點)出發,依次遊覽每個景區。為了更好的評價這條鐵路,xkszltl 為每乙個景區都賦予了乙個美觀度,而一條旅行路徑的價值就是它所經過的景區的美觀度之和。不過,隨著天氣與季節的變化,某些景點的美觀度也會發生變化。

xkszltl 希望為每位旅客提供最佳的旅行指導,但是由於遊客的時間有限,不一定能遊覽全部景區,然而他們也不希望旅途過於短暫,所以每個遊客都希望能在某乙個區間內的車站結束旅程,而 xkszltl 的任務就是為他們選擇乙個終點使得旅行線路的價值最大。可是當地的景點與前來觀光的旅客實在是太多了,xkszltl 無法及時完成任務,於是找到了準備虐殺 noi2019 的你,希望你能幫助他完成這個艱鉅的任務。

題解考慮分塊凸包

設 s

is_i

si​ 表示i的字首和, d

jd_j

dj​ 表示 j

jj 這個區間的每個數都加上它, f

jf_j

fj​ 表示每位置的字首和都加上它

對於第 j

jj 塊的區間 [l,

r]

[l,r]

[l,r

] 考慮它的 ans

ansansan

s=ma

xi=l

rfj+

dj×(

i−l)

+s

ians=max_^ f_j+d_j \times (i-l)+s_i

ans=ma

xi=l

r​fj

​+dj

​×(i

−l)+

si​設 x=i

−l

x=i-l

x=i−

l , y=s

iy=s_i

y=si

​ ,把式子化簡成 y=−

dj×x

+ans

−f

jy=-d_j \times x+ans-f_j

y=−dj​

×x+a

ns−f

j​故維護上凸殼即可

#include #define i inline

#define db double

#define ll long long

using namespace std;

const int n=1e5+5,m=350;

ll s[n],f[m],d[m],c[m];

int m,n,b,b[n],l[m],r[m],z,s[m],p[m][m],sz[m];

i db k(int x,int y)

i void u(int x)

i ll a(int x)

}i ll q(int l,int r)

int main()r[z=b[n]]=n;

for (int i=1;i<=z;i++) u(i);

scanf("%d",&m);ll x;

for (int op,l,r;m--;)

return 0;

}

旅行規劃問題

問題描述 g 先生想獨自駕駛汽車從城市a 到城市b。從城市a 到城市b 的距離為d0 公里。汽車油箱的容量為c 公升。每公升汽油能行駛e 公里。出發點每公升汽油的 為p 元。從城市a到城市b 沿途有n 個加油站。第i 個加油站距出發點的距離為di,油價為每公升pi元。如何規劃才能使旅行的費用最省。程...

旅行規劃問題(貪心)

g 先生想獨自駕駛汽車從城市a到城市b。ab距離為dist 千公尺,油箱容量為c公升,每公升油行駛d千公尺,沿途有n個加油站,距a城的距離為si,油價分別為pi。a點時,郵箱為空,起點油價為p。求從a到b的最少費用。不能到達輸出 no solution 輸入 dsit c d p n 接下來n行輸入...

BZOJ2388 旅行規劃

分塊,每一塊維護字首和,觀察發現,一次區間加操作對於 l 前,r後的區間裡相對的大小關係沒有影響,對於 l r 裡,將每個位置放在平面內作為乙個點 i si 那麼相當於給區間裡加了乙個斜率。每個塊維護乙個凸包 上凸下凸應該都可以,下文以上凸為例 如果這個塊被完整覆蓋,就打個斜率的標記,否則暴力重構凸...