看到題目,時間複雜度至少是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可以同時購買多快土地.這些土地的價 格是它們最大的長乘以它們最大的寬,但是土地的長寬不能...