【bzoj1597】[Usaco2008 Mar]土地购买
1597: [Usaco2008 Mar]土地购买
Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3739  Solved: 1376
[Submit][Status][Discuss]
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
100 1
15 15
20 5
1 100
Sample Output
按照x,y递增排序,然后把可以和其它打包一起买的去掉
然后使得剩下一些y递减x递增的矩形
显然f[i]=min(f[j]+y[j+1]x[i])
然后再搞个斜率优化
方程是(f[j]-f[k])/(y[k+1]-y[j+1])<x[i]
然后维护一个下凸包
——转自hzwer
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 50010
#define FILE "read"
#define up(i,j,n) for(ll i=j;i<=n;i++)
namespace INIT{
char buf[<<],*fs,*ft;
inline char getc() {return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;}
inline ll read(){
ll x=,f=; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getc();}
while(isdigit(ch)) {x=x*+ch-''; ch=getc();}
return x*f;
}
}using namespace INIT;
struct node{ll x,y;}a[MAXN];
ll n,len,head,tail,x[MAXN],y[MAXN],f[MAXN],q[MAXN];
bool cmp(node a,node b) {return a.x==b.x?a.y<b.y:a.x<b.x;}
void init(){
n=read();
up(i,,n) a[i].x=read(),a[i].y=read();
sort(a+,a+n+,cmp);
up(i,,n){
while(len&&a[i].y>=y[len]) len--;
x[++len]=a[i].x; y[len]=a[i].y;
}
}
inline double slop(ll j,ll k) {return (double)(f[j]-f[k])/(double)(y[k+]-y[j+]);}
void solve(){
up(i,,len){
while(head<tail&&slop(q[head],q[head+])<x[i]) head++;
ll t=q[head];
f[i]=f[t]+y[t+]*x[i];
while(head<tail&&slop(q[tail-],q[tail])>slop(q[tail],i)) tail--;
q[++tail]=i;
}
printf("%lld\n",f[len]);
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
init();
solve();
return ;
}
【bzoj1597】[Usaco2008 Mar]土地购买的更多相关文章
- 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买
		1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2474 Solved: 900[Submit][ ... 
- bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp
		1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5524 Solved: 2074[Submit] ... 
- bzoj1597: [Usaco2008 Mar]土地购买 dp斜率优化
		东风吹战鼓擂第一题土地购买送温暖 ★★★ 输入文件:acquire.in 输出文件:acquire.out 简单对比时间限制:1 s 内存限制:128 MB 农夫John准备扩大他的农 ... 
- [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
		Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ... 
- Bzoj1597 [Usaco2008 Mar]土地购买
		Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4005 Solved: 1460 Description 农夫John准备扩大他的农场,他正在考虑N ... 
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化)
		Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ... 
- 【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
		bzoj1597懒得复制,戳我戳我 Solution: 线性DP打牌\(+\)斜率优化 定义状态:\(dp[i]\)到了位置\(i\)最少花费 首先我们要发现,如果有一个小方块能被其他的大方块包围,其 ... 
- 2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)
		传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ... 
- BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)
		题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ... 
- [Bzoj1597][Usaco2008 Mar]土地购买(斜率优化)
		题目链接 因为题目说可以分组,并且是求最值,所以斜率优化应该是可以搞的,现在要想怎么排序使得相邻的数在一个组中最优. 我们按照宽$w$从小到大,高$h$从小到大排序.这时发现可以筛掉一些一定没有贡献的 ... 
随机推荐
- PostgreSQL设置事务隔离级别实验
			apple=# begin; BEGIN apple=# set transaction ISOLATION LEVEL read committed ; SET apple=# select * f ... 
- .Net脱壳工具 de4dot参数说明/简易教程
			de4dot /? 帮助原文 使用方法 de4dot "d:\xx.exe" -p xc -p xc 指定壳类型 , 这里是xc,表示Xenocode壳.这样会在exe的相同目录 ... 
- ubuntu 11.04 old sources.list
			#deb cdrom:[Ubuntu 11.04 _Natty Narwhal_ - Release amd64 (20110427.1)]/ natty main restricted # See ... 
- springboot将项目打成war包
			1. 将项目的打包方式改为war包 <groupId>com.cc</groupId> <artifactId>aaaaaa</artifactId> ... 
- asp.net core microservices 架构之分布式自动计算(三)-kafka日志同步至elasticsearch和kibana展示
			一 kafka consumer准备 前面的章节进行了分布式job的自动计算的概念讲解以及实践.上次分布式日志说过日志写进kafka,是需要进行处理,以便合理的进行展示,分布式日志的量和我们对日志的重 ... 
- sysfs中属性文件的建立
			1.device中建立属性文件 (1)函数调用关系: /**************************************************************/ device_c ... 
- 定时器Timer&ScheduledThreadPoolExecutor
			定时器Timer&ScheduledThreadPoolExecutor /** * @ClassName: TimerTest * @author: daniel.zhao * @date: ... 
- java 题
			[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1 ... 
- 黄聪:wordpress向mysql字段中保存html代码(使用add_option()方法),然后无法显示出问题
			你可以把" 引号去掉了再进库,或者使用 stripslashes_deep() <?php $str = "Is your name O\'reilly?"; // ... 
- 学习笔记之C++ Primer中文版(第五版)
			非常权威系统的语言书,正好学习下C++11内容. C++ Primer_百度百科 http://baike.baidu.com/link?url=YLvDJE9w3CjGp3eQwjuXYKUZs7v ... 
