USACO 土地購買

2022-05-11 03:22:34 字數 1497 閱讀 2200

農夫john準備擴大他的農場,他正在考慮n (1 <= n <= 50,000) 塊長方形的土地. 每塊土地的長寬滿足(1 <= 寬 <= 1,000,000; 1 <= 長 <= 1,000,000).

每塊土地的**是它的面積,但fj可以同時購買多塊土地. 這些土地的**是它們最大的長乘以它們最大的寬, 但是土地的長寬不能交換. 如果fj買一塊3x5的地和一塊5x3的地,則他需要付5x5=25.

fj希望買下所有的土地,但是他發現分組來買這些土地可以節省經費. 他需要你幫助他找到最小的經費.

第1行: 乙個數: n

第2..n+1行: 第i+1行包含兩個數,分別為第i塊土地的長和寬

第一行: 最小的可行費用.

4 100 1

15 15

20 5

1 100

輸入解釋:

共有4塊土地.

輸出解釋:

fj分3組買這些土地: 第一組:100x1, 第二組1x100, 第三組20x5 和 15x15 plot. 每組的**分別為100,100,300, 總共500.

usaco

堆,動態規劃, 斜率優化

簡單dp,斜率優化;

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include

13#define ll long long

14#define inf 1<<30

15#define rep(i,a,b) for(register int i=a;i<=b;i++)

16#define re register

17#define db double

18using

namespace

std;

19const

int n=50010;20

struct

noded[n],nw[n];

23ll dp[n],q[n];

24int

n;25

inline ll gi( )

2632 inline bool cmp(const node& a,const node& b)

33 inline double getx(int i,int

j) 36 inline ll getnum(int x,int

j) 39

intmain( )

4050 q[1]=1

;51 dp[0]=0

;52 dp[1]=nw[1].a*nw[1

].b;

53 re int hd=0,tl=1;54

for(i=2;i<=n;i++)

60 printf("

%lld

",dp[n]);

61return0;

62 }

USACO08MAR 土地購買

點此看題 首先考慮如果有乙個塊長和寬都比另乙個塊要小,那麼這個塊就沒有存在的意義了,我們可以先排序 長為第一關鍵字,寬為第二關鍵字,從小到大 然後從後往前掃,期間維護寬的最大值,如果最大值不比當前寬小,那麼這個塊沒用,我們去除完沒用的點之後再排一遍序 方法一樣 這樣就可以愉快的dpdp dp了,設d...

Usaco2008 Mar 土地購買

此題依舊是斜率優化。感覺自己做斜率優化做瘋了 滑稽 還是與先前一樣弄出dp式 這裡要著重說明一下 這裡的x,y都已經是排過序並整理了的!我們先按照x為第一關鍵字,y為第二關鍵字來從小到大 both 排序。隨後,我們發現它的y不滿足單調性。所以我們應當將其轉換一下。這樣子,我們就可以斜率優化了。設k上...

bzoj1597 土地購買

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