土地徵用 斜率優化

2021-09-26 21:42:02 字數 2836 閱讀 5833

連線

題意:有n個矩形,隨意分成幾組,使得花費最小,每組的花費是該組最大的寬度×最大的長度。長和寬不能交換位置。

思路:先貪心地想一下,如果乙個長和寬都很大的需要選的話,那麼長度和寬度比它都要小的都可以 放到這組裡面,不會有任何的額外花費。且分組是隨便分,沒有相鄰之類的限制,那麼可以先排序一下,同時可以刪去那些不會有額外貢獻的矩形。

然後先考慮一下on2

on^2

on2的做法,很容易可以得出dp[

i]=m

in(d

p[i]

,dp[

j]+h

[i]∗

w[j+

1]

)dp[i]=min(dp[i],dp[j]+h[i]*w[j+1])

dp[i]=

min(

dp[i

],dp

[j]+

h[i]

∗w[j

+1])

,h[i]*w[j+1]是j+i到i這段區間的總花費,我這邊是優先長小的,然後寬小的,排序且刪除了沒有貢獻的之後,長遞增,寬遞減。

on^2**:

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e4+5;

pairp[n]

,st[n]

;ll dp[n]

;int top;

intmain()

sort

(p+1

,p+1

+n);

p[0]

=;top=0;

for(

int i =

1;i <= n;i++

)memset

(dp,

125,

sizeof dp)

; dp[0]

=0;for

(int i=

1;i<=top;i++)}

printf

("%lld\n"

,dp[top]);

return0;

}

對於資料範圍大一些就需要用上斜優化了,轉移方程還是dp[i]=min(dp[i],dp[j]+h[i]*w[j+1])

如果dp[i]可以從dp[j]和dp[k]兩個位置轉移,那麼就有

d p[

i]=d

p[j]

+h[i

]∗w[

j+1]

dp[i]=dp[j]+h[i]*w[j+1]

dp[i]=

dp[j

]+h[

i]∗w

[j+1

] 和 dp[

i]=d

p[k]

+h[i

]∗w[

k+1]

dp[i]=dp[k]+h[i]*w[k+1]

dp[i]=

dp[k

]+h[

i]∗w

[k+1

]如果通過dp[k]轉移會更優,那麼就要有dp[

j]+h

[i]∗

w[j+

1]

>dp

[k]+

h[i]

∗w[k

+1

]dp[j]+h[i]*w[j+1]>dp[k]+h[i]*w[k+1]

dp[j]+

h[i]

∗w[j

+1]>dp

[k]+

h[i]

∗w[k

+1]移項後就是dp[

j]−d

p[k]

w[k+

1]−w

[j+1

]>h[

i]

\frac>h[i]

w[k+1]

−w[j

+1]d

p[j]

−dp[

k]​>h[

i]然後利用這個關係以及單調佇列維護一下

優化**:

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e5+5;

pairp[n]

,st[n]

;ll dp[n]

;int top;

int tb[n]

,fr,bk;

double

cal(

int j,

int k)

intmain()

sort

(p+1

,p+1

+n);

top=0;

for(

int i =

1;i <= n;i++

)fill

(dp,dp+n,

1e18);

dp[0]

=0ll

;for

(int i=

1;i<=top;i++)}

fr=bk=0;

for(

int i=

1;i<=top;i++

)printf

("%lld\n"

,dp[top]);

return0;

}//b = dp[i]

//k = l[i]

//x = r[j+1]

//y = dp[j]

//y = -k * x + b

bzoj1597 土地購買 斜率優化

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

斜率優化dp bzoj 1597 土地購買

最近學習斜率優化!然而其實並不明白斜率是如何操作的 還好有小天使帶我 而且斜率優化好像是有模板的樣子,很多題都可以套用模板。基本的dp方程 dp i min dp j land.x i land.y j 1 include include include using namespace std st...

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