農夫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 #include13#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塊土地。接下...