【BZOJ 1597】 [Usaco2008 Mar]土地購買 (斜率優化)

1597: [Usaco2008 Mar]土地購買

Time Limit:?10 Sec??Memory Limit:?162 MB
Submit:?3601??Solved:?1322

Description

農夫John準備擴大他的農場,他正在考慮N (1 <= N <= 50,000) 塊長方形的土地. 每塊土地的長寬滿足(1 <= 寬 <= 1,000,000; 1 <= 長 <= 1,000,000). 每塊土地的價格是它的面積,但FJ可以同時購買多快土地. 這些土地的價格是它們最大的長乘以它們最大的寬, 但是土地的長寬不能交換. 如果FJ買一塊3x5的地和一塊5x3的地,則他需要付5x5=25. FJ希望買下所有的土地,但是他發現分組來買這些土地可以節省經費. 他需要你幫助他找到最小的經費.

Input

* 第1行: 一個數: N

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

Output

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

Sample Input

4
100 1
15 15
20 5
1 100

輸入解釋:

共有4塊土地.

Sample Output

500

HINT

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

?

?

【分析】

   

  因為要買所有土地,所以如果一個矩形完全被另一個矩形包含,那么可以不考慮小的那個矩形。

  去掉他們只有按照長x升序排序,可以發現寬y都是降序的(不然會被去掉),所以容易知道我們每次取的一組都是連續的一段。

  設答案為f[i]

  則f[i]=x[i]*y[j+1]+f[j] 得到斜率優化標準式子,維護一個左下凸包。

?

代碼如下:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cmath>
 8 using namespace std;
 9 #define Maxn 50010
10 #define LL long long
11 
12 struct hp
13 {
14     LL x,y;
15 }a[Maxn];
16 
17 bool cmp(hp x,hp y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);}
18 
19 struct node
20 {
21     LL x,y;
22 }t[Maxn];
23 
24 LL f[Maxn];
25 
26 bool check(int x,int y,int k)
27 {
28     LL kk=k;
29     return kk*(t[x].x-t[y].x)<=t[x].y-t[y].y;
30 }
31 
32 bool check2(int x,int y,int z)
33 {
34     return (t[y].x-t[z].x)*(t[x].y-t[y].y)<=(t[x].x-t[y].x)*(t[y].y-t[z].y);
35 }
36 
37 int main()
38 {
39     int n;
40     scanf("%d",&n);
41     for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
42     sort(a+1,a+1+n,cmp);
43     int cnt=0;
44     for(int i=1;i<=n;i++)
45     {
46         while(cnt>0&&a[i].y>=a[cnt].y) cnt--;
47         a[++cnt]=a[i];
48     }
49     int len=0,st;
50     t[++len].x=a[1].y;t[len].y=0;st=1;
51     for(int i=1;i<=cnt;i++)
52     {
53         while(st<len&&check(st,st+1,-a[i].x)) st++;
54         f[i]=a[i].x*t[st].x+t[st].y;
55         t[0].x=a[i+1].y;t[0].y=f[i];
56         while(st<len&&check2(len-1,len,0)) len--;
57         t[++len]=t[0];
58     }
59     printf("%lld\n",f[cnt]);
60     return 0;
61 }
[BZOJ 1597]

?

2016-09-19?20:15:26

轉載于:https://www.cnblogs.com/Konjakmoyu/p/5886483.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457253.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入淺出學java_《深入淺出學JAVA開發初級》

整體說明&#xff1a;Java私塾的這一套視頻是完全真實課堂錄制&#xff0c;實際上課時間為十一天&#xff0c;主要內容包括&#xff1a;1&#xff1a;系統完整的學習Java的基礎知識2&#xff1a;深入剖析重點知識點的理論3&#xff1a;超多的編程題目和程序講解4&#xff1a;最…

重定位與鏈接腳本

1.為什么需要重定位   位置無關編碼(PIC&#xff0c;position independent code)&#xff1a;匯編源文件被編碼成二進制可執行程序時編碼方式與位置&#xff08;內存地址&#xff09;無關。  位置有關編碼&#xff1a;匯編源碼編碼成二進制可執行程序后和內存地址是有關的。…

Linux bashrc和profile的用途和區別

導讀使用終端ssh登錄Linux操作系統的控制臺后&#xff0c;會出現一個提示符號&#xff08;例如&#xff1a;#或~&#xff09;&#xff0c;在這個提示符號之后可以輸入命令&#xff0c;Linux根據輸入的命令會做回應&#xff0c;這一連串的動作是由一個所謂的Shell來做處理。Shel…

python讀取word文檔結構圖_Word 有什么技巧,讓你相見恨晚?

Word作為日常辦公最常用的軟件之一&#xff0c;其實真沒你想得那么簡單&#xff01;你不知道的每一個技巧&#xff0c;都會讓你相見恨晚&#xff01;每當身邊的小伙伴詢問這些疑難雜癥時&#xff0c;我都會拋出這張圖…真的沒騙你&#xff0c;我們遇到的 99% 的Word難題&#x…

Golang 特性簡介

by sheepbao 主要大概介紹go語言的歷史和特性&#xff0c;簡單的入門。 來歷 很久以前&#xff0c;有一個IT公司&#xff0c;這公司有個傳統&#xff0c;允許員工擁有20%自由時間來開發實驗性項目。在2007的某一天&#xff0c;公司的幾個大牛&#xff0c;正在用c開發一些比較繁…

HTML實體字符轉化為HTML標簽

html_entity_decode方法 參數描述string必需。規定要解碼的字符串。flags 可選。規定如何處理引號以及使用哪種文檔類型。 可用的引號類型&#xff1a; ENT_COMPAT - 默認。僅解碼雙引號。ENT_QUOTES - 解碼雙引號和單引號。ENT_NOQUOTES - 不解碼任何引號。規定所使用文檔類型…

華為2017java筆試題_2017年java華為面試題

2017年java華為面試題通過HCNP認證&#xff0c;將證明您對中小型網絡有全面深入的了解&#xff0c;掌握中小型網絡的通用技術&#xff0c;并具備獨立設計中小型網絡以及使用華為路由交換設備實施設計的能力。下面是小編收集的關于java華為面試題&#xff0c;希望大家認真閱讀!1…

Tomcat 配置詳解/優化方案

Server.xml 【原地址&#xff1a;http://blog.csdn.net/cicada688/article/details/14451541】 Server.xml配置文件用于對整個容器進行相關的配置。 <Server>元素&#xff1a;是整個配置文件的根元素。表示整個Catalina容器。 屬性&#xff1a;className&#xff1a;實現…

MySQL創建數據庫與創建用戶以及授權

1、create schema [數據庫名稱] default character set utf8 collate utf8_general_ci;--創建數據庫 采用create schema和create database創建數據庫的效果一樣。 2、create user [用戶名稱]% identified by [用戶密碼];--創建用戶 密碼8位以上&#xff0c;包括&#xff1a;大寫…

java 防止url重復請求_Web項目如何防止客戶端重復發送請求

在Web項目中&#xff0c;有一些請求或操作會對數據產生影響(比如新增、刪除、更新)&#xff0c;針對這類請求一般都需要做一些保護&#xff0c;以防止用戶有意或無意的重復發起這樣的請求導致的數據錯亂。本文總結了一些防止客戶端重復發送請求的方法。方法一&#xff1a;JS監聽…

【bzoj1010-toy】斜率優化入門模板

dsy1010: [HNOI2008]玩具裝箱 【題目描述】 有n個數&#xff0c;分成連續的若干段&#xff0c;每段&#xff08;假設從第j個到第i個組成一段&#xff09;的分數為 (X-L)^2&#xff0c;X為j-iSigma(Ck) i<k<j&#xff0c;其中L是一個常量。目標&#xff1a;各段分數的總和…

itellyou操作系統,office等軟件的很全的下載站

itellyou操作系統&#xff0c;office等軟件的很全的下載站http://www.itellyou.cn/轉載于:https://blog.51cto.com/wangheyu1/1894724

矩陣的馬鞍點

#include<stdio.h>#define n 4//馬鞍點是第I行值最小第J列值最大 void maxmin(int a[n][n]){ int i,j ,flag; int max[n],min[n]; for(i0;i<n;i) { min[i]a[i][0];//將數組每行的第一個元素賦值給min[]數組 for(j1;j<n;j) { if(a[i][j]<min[i]) min[i]a[i][j];…

Linux運維工程師面試-部分題庫

一、Linux操作系統知識 1.常見的Linux發行版本都有什么&#xff1f;你最擅長哪一個&#xff1f;它的官網網站是什么&#xff1f;說明你擅長哪一塊&#xff1f; 2.Linux開機啟動流程詳細步驟是什么&#xff1f;系統安裝完&#xff0c;忘記密碼如何破解&#xff1f; 3.企業中Linu…

java統計系統線程數_Java并發(八)計算線程池最佳線程數

目錄一、理論分析二、實際應用為了加快程序處理速度&#xff0c;我們會將問題分解成若干個并發執行的任務。并且創建線程池&#xff0c;將任務委派給線程池中的線程&#xff0c;以便使它們可以并發地執行。在高并發的情況下采用線程池&#xff0c;可以有效降低線程創建釋放的時…

php大小寫轉換函數

1.將字符串轉換成小寫 strtolower(): 該函數將傳入的字符串參數所有的字符都轉換成小寫,并以小定形式放回這個字 符串.例: <?php$str "I want To FLY";$str strtolower($str);echo $str; ?>輸出結果: i want to fly 2.將字符轉成大寫 strtoupper(): 該…

關于移動端 1px 像素問題

移動端1px變粗的原因 移動端html的header總會有一句<meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalableno">這句話定義了本頁面的viewport的寬度為設備寬度,初始縮放值和最大縮放值都為1,并禁止了…

java框架概念_java概念(2)

java概念(2)重載和重寫重載&#xff1a;同一個類中&#xff0c;方法名相同&#xff0c;參數不同重寫&#xff1a;父子類中&#xff0c;子類重新定義父類的方法多態? 多態&#xff1a;同一種行為&#xff0c;不同的對象有不同的表現形式。? 重載 編譯時根據參數決定調用的方法…

CentOS(八)--crontab命令的使用方法

crontab命令常見于Unix和Linux的操作系統之中&#xff0c;用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令&#xff0c;并將其存放于"crontab"文件中&#xff0c;以供之后讀取和執行。 在Linux系統中&#xff0c;Linux任務調度的工作主要分為以下兩類&…