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

2021-08-02 07:28:20 字數 1594 閱讀 4028

題目戳這裡:

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 2017-06-07 19:37:12

2102878 kamisama123 1597 wrong_answer 6076 kb 64 ms c++/edit 1234 b 2017-06-07 19:32:17

2102871 kamisama123 1597 accepted 3168 kb 168 ms c++/edit 867 b 2017-06-07 19:29:20

2102867 kamisama123 1597 wrong_answer 3684 kb 64 ms c++/edit 1233 b 2017-06-07 19:28:16

2102864 kamisama123 1597 wrong_answer 2512 kb 16 ms c++/edit 1225 b 2017-06-07 19:26:02

2102828 kamisama123 1597 wrong_answer 25708 kb 16 ms c++/edit 1032 b 2017-06-07 18:58:25

2102826 kamisama123 1597 wrong_answer 2512 kb 16 ms c++/edit 1030 b 2017-06-07 18:57:57

真是wa了又a,a了又wa。

搞了半天是最開始初始化弄錯了。。。

這是一道簡單的入門斜率優化dp題。

首先如果一塊土地它的長寬都比另乙個土地大,那麼小土地是沒有什麼屁用的。因為你買大土地在帶上乙個小土地,小土地就相當於免費送了。

所以我們按照土地的長排序,把寬稍微處理一下,就能弄出來乙個長是遞增,寬是遞減的一堆土地。

我們把f[i]定義為買前i個土地最小花費,所以易得dp方程。

我用a[i].x表示第i個土地長,a[i].y表示寬。

f[i]=min;

但是n是50000的範圍,n^2列舉j肯定**。

所以我們用斜率優化dp思想。

令k

#include

#include

#include

#include

#define n 100005

#define dnt long long

using namespace std;

struct date;

date a[n],aa[n];

bool comp(const date&a,const date&b)

bool vis[n];

dnt n,num,f[n],head,tail,q[n];

int main()

}for(dnt i=1;i<=n;i++)

if(vis[i]==1)

for(dnt i=1;i<=num;i++)

printf("%lld\n",f[num]);

return

0;}

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 的動態規劃來做。由於購買土地的花費等於最大的長乘以最大的寬,我們可以發現,若一塊土地的長寬比另一塊土地的長寬都大,那麼另一塊土地是沒有用的。所以我們考慮刪去另一塊。顯然這是乙個偏序問題,我們把土地按長排序。要刪去長寬都...