BZOJ 1597 土地購買

2021-08-20 13:06:26 字數 2867 閱讀 4137

傳送門 思路

顯然如果不對輸入資料加以處理,這道題就只能用 o(

3n) o(3

n)

的動態規劃來做。

由於購買土地的花費等於最大的長乘以最大的寬,我們可以發現,若一塊土地的長寬比另一塊土地的長寬都大,那麼另一塊土地是沒有用的。所以我們考慮刪去另一塊。

顯然這是乙個偏序問題,我們把土地按長排序。要刪去長寬都小的土地,顯然可以對寬建立單調棧。

那麼現在我們剩下的土地的長遞增,寬遞減。如果我們選擇連續的一段購買,那麼花費顯然是最右邊的長乘以最左邊的寬。這說明了我們不可能不連續買:如果我們把連續的一段中間去除一段單獨買,那一段可以直接放到連續的一段中間去買,不影響花費。

考慮動態規劃。設 fi

f

i表示購買前

i i

塊土地的最小花費,邊界條件為 f0

=0' role="presentation" style="position: relative;">f0=

0f0=

0,最終答案為 fn

f

n(這裡的

n n

是去掉被包含的土地後的土地數量),狀態轉移方程為: fi

=min0≤

j<

i' role="presentation">fi=

min0≤j

i=min0≤j

<

i時間複雜度為 o(

n2) o(n

2)

。設 j

>

k j

>

k,若

j j

比 k' role="presentation" style="position: relative;">k

k更優,有: fj

+ai×

bj+1

+ai×

bk+1

f j+

ai×b

j+

1

+ai×

bk+1

化簡: fj

−fk<−a

i(bj

+1−b

k+1)

f j−

fk

<−a

i(bj

+1−b

k+1)

由於 b b

單調遞減,因此移項時要變號: fj

−fkb

j+1−

bk+1

>−a

i' role="presentation">fj−

fkbj

+1−b

k+1>−a

ifj−

fkbj

+1−b

k+1>−a

i設 j>

k j

>

k,若 sl

ope(

j,k)

>sl

ope(

k,l)

s lo

pe(j

,k

)>sl

ope(

k,l)

,則 k k

永遠不會是最優決策。

由於 −ai

' role="presentation" style="position: relative;">−ai

−ai單調遞減,因此若不等式在某個時刻成立,那它將永遠成立。故可以使用單調佇列斜率優化。

參考**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

typedef

unsigned

long

long ull;

using

std::cin;

using

std::cout;

using

std::endl;

typedef ll int_put;

int_put readin()

while (std::isdigit(ch))

return positive ? -a : a;

}void printout(int_put x)

const

int maxn = int(5e4) + 5;

int n;

struct land

bool

operator

<(const land& b) const

} lands[maxn];

ll a[maxn], b[maxn];

#define runinstance(x) delete new x

struct work

ll dp(int i, int j)

work()

printout(f[n]);

}};void run()

n = 0;

for (int i = 0; i < stack.size(); i++)

runinstance(work);

}int main()

bzoj1597 土地購買

description 地主想買一些長方形的土地,所有的土地可以分為若干組,每一組的土地的 為這一組裡的最長的長乘上最長的寬。土地的長和寬是不能交換的,例如一塊2 5的土地和一塊5 2的土地放在一起,為5 5 25。最少花費多少錢可以買下所有的土地。input 第一行乙個數n表示一共有n塊土地。接下...

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