斜率優化bzoj 1597

2021-10-03 01:51:04 字數 2846 閱讀 6241

看到題目,時間複雜度至少是o(n

logn

)o(nlogn)

o(nlog

n)或o (n

sqrt

(n))

o(nsqrt(n))

o(nsqr

t(n)

)前者的概率較大,此題有計算內乘積,應該與分塊無關(早就知道是斜率優化)

假設長為a

aa值,寬為bbb值

觀察題目, 可以猜想一下決策會不會有連續性,猜想決策可能與排序有關,先按長 (a

aa) 排序。在思考一會,就會發現該猜想是對的,因為每個總方案中,如果存在一組土地a

aa值不連續,那該方案一定不是唯一的最優解。

證明:假設存在乙個方案使得將土地按a

aa值公升序排列後存在i,j

,k

i,j,k

i,j,

k使得a

i

a_ai

​​​且i,k

i,ki,

k分在一組中,而j

jj在另一組中。若b

j

b_jbj

​​,則將i,j

,k

i,j,k

i,j,

k分在一組肯定會更優,因為其他不變,把j

jj移動到i,k

i,ki,

k這一組,j

jj原來的那組值會更小,而i,j

,k

i,j,k

i,j,

k這一組不會變,因為j

jj的長和寬在這一組中均不為最大值。同理,可證明另一種情況。(有興趣可以自行證明)

這樣,我們就可以先按a

aa值排序。又因為如果某一塊土地b

bb值比任何一塊在它右邊的土地小,那麼乙個最優解一定是將這塊土地與那塊土地合併,因為這樣不會產生任何影響,就可以去除滿足這個條件的土地

在這一步後,整個陣列也就是a

aa值遞增,b

bb值遞減,那麼簡單看一下就知道可以dp了

設f [i

]f[i]

f[i]

為前i

ii塊土地的最小花費

方程就是f[i

]=f[

j]+b

[j+1

]∗a[

i]

f[i]=f[j]+b[j+1]*a[i]

f[i]=f

[j]+

b[j+

1]∗a

[i]看到乘積,自然想到斜率優化,pi(

−b[j

+1],

f[i]

),ki

=a[i

]p_(-b[j+1],f[i]),k_=a[i]

pi​(−b

[j+1

],f[

i]),

ki​=

a[i]

就可以愉快的斜率優化了,時間複雜度o(n

)o(n)

o(n) cod

e:

code:

code

:

#include

using

namespace std;

#define int long long

const

int maxn=

50000

;struct wa[maxn+10]

,b[maxn+10]

;struct pos[maxn+10]

;int f[maxn+10]

,q[maxn+10]

,fr,ed;

inline

bool

cmp(

const w&

,const w&);

inline

bool

cmp_slope

(po,po,

int)

;inline

bool

cmp_slope2

(po,po,po)

;inline

intread()

;signed

main()

stable_sort

(a+1

,a+n+

1,cmp)

;for

(register

int i=n;i>=1;

--i)

n=fr; fr=0;

for(

register

int i=

1;i<=n;

++i) b[i]

=a[q[n-i+1]

];for(

register

int i=

1;i<=n;

++i) a[i]

=b[i]

; s[0]

.y=0

; s[0]

.x=-a[1]

.b;for

(register

int i=

1;i<=n;

++i)

printf

("%lld\n"

,f[n]);

return0;

}inline

intread()

inline

bool

cmp(

const w &x,

const w &y)

inline

bool

cmp_slope

(po x,po y,

int k)

inline

bool

cmp_slope2

(po x,po y,po z)

bzoj1597 土地購買 斜率優化

農夫john準備擴大他的農場,他正在考慮n 1 n 50,000 塊長方形的土地.每塊土地的長寬滿足 1 寬 1,000,000 1 長 1,000,000 每塊土地的 是它的面積,但fj可以同時購買多快土地.這些土地的 是它們最大的長乘以它們最大的寬,但是土地的長寬不能交換.如果fj買一塊3x5的...

bzoj 1597 土地購買(斜率優化dp)

題目戳這裡 2102912 kamisama123 1597 accepted 6076 kb 152 ms c edit 1171 b 2017 06 07 19 44 16 2102894 kamisama123 1597 accepted 6080 kb 160 ms c edit 982 b...

BZOJ1597土地購買 斜率優化DP

description 農夫john準備擴大他的農場,他正在考慮n 1 n 50,000 塊長方形的土地.每塊土地的長寬滿足 1 寬 1,000,000 1 長 1,000,000 每塊土地的 是它的面積,但fj可以同時購買多快土地.這些土地的價 格是它們最大的長乘以它們最大的寬,但是土地的長寬不能...