BZOJ 1597 土地購買 斜率優化DP

2022-05-26 23:51:12 字數 1638 閱讀 9823

如果有一塊土地的長和寬都小於另一塊土地的長和寬,顯然這塊土地屬於「贈送土地」。

我們可以排序一下將這些贈送土地全部忽略掉,一定不會影響到答案。

那麼剩下的土地就是長遞減,寬遞增的。令dp[i]表示購買前i個土地的最小代價。

顯然有dp[i]=min(dp[j]+ku[i]*ch[j+1]).(j這個式子得用斜率優化一下。很normal,推出式子就解決了。

# include # include 

# include

# include

# include

# include

# include

# include

# include

# include

# include

using

namespace

std;

# define lowbit(x) ((x)&(-x))

# define pi

3.1415926535

# define eps 1e-9

# define mod

100000007

# define inf

1000000000

# define mem(a,b) memset(a,b,

sizeof

(a))

# define for(i,a,n)

for(int i=a; i<=n; ++i)

# define fo(i,a,n)

for(int i=a; ii)

# define bug puts("h

");# define lch p

<<1

,l,mid

# define rch p

<<1|1,mid+1

,r# define mp make_pair

# define pb push_back

typedef pair

pii;

typedef vector

vi;# pragma comment(linker,

"/stack:1024000000,1024000000")

typedef

long

long

ll;int

scan()

void out(int

a)

if(a>=10) out(a/10

); putchar(a%10+'0'

);}const

int n=50005;//

code begin...

struct nodenode[n];

ll dp[n];

int que[n], head=-1

, tail;

bool

comp(node a, node b)

bool check(int x, int y, int z)

bool sol(int x, int y, int

z)int

main ()

printf(

"%lld\n

",dp[pos]);

return0;

}

view code

bzoj1597 土地購買 斜率優化

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

bzoj1597 土地購買

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

BZOJ 1597 土地購買

傳送門 思路 顯然如果不對輸入資料加以處理,這道題就只能用 o 3n o 3 n 的動態規劃來做。由於購買土地的花費等於最大的長乘以最大的寬,我們可以發現,若一塊土地的長寬比另一塊土地的長寬都大,那麼另一塊土地是沒有用的。所以我們考慮刪去另一塊。顯然這是乙個偏序問題,我們把土地按長排序。要刪去長寬都...