[USACO08MAR]土地征用Land Acquisition
题面在这里
题意
约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地。
如果约翰单买一块土地,价格就是土地的面积,但他可以选择并购一组土地,
并购的价格为这些土地中最大的长乘以最大的宽。
给定每份土地的尺寸,请你帮助他计算购买所有土地所需的最小费用。
数据范围
\]
sol
我们发现,如果一块土地被另一块土地所包含(即长和宽都比另一块土地小),
那么只需购买那另一块土地即可,于是我们可以据此筛掉其他的土地,
只剩下一些长度递减,宽度递增的土地
然后我们猜想FJ每次购买的一组土地肯定是这个序列连续的一段
(假设某种最优方案中购买的土地不是一段,那么将中间的部分补上显然不会更劣)
于是就变成了经典的序列分段问题,
设\(f[i]\)表示购买前\(i\)块土地所需的最小代价,我们有
\]
斜率优化插点\((-length[j],f[j])\),按照递增的\(k=width[i]\)处理即可
代码
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<cstring>
#include<complex>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define mp make_pair
#define pb push_back
#define RG register
#define il inline
using namespace std;
typedef unsigned long long ull;
typedef vector<int>VI;
typedef long long ll;
typedef double dd;
const dd eps=1e-10;
const int mod=1e8;
const int N=50010;
il ll read(){
RG ll data=0,w=1;RG char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
return data*w;
}
il void file(){
freopen(".in","r",stdin);
freopen(".out","w",stdout);
}
int n,m;ll f[N];
struct area{ll a,b;}s[N];
bool cmp(area x,area y){
if(x.a==y.a)return x.b>y.b;
else return x.a>y.a;
}
struct node{ll x,y;}Q[N];ll L=1,R;
il void insert(node q){
while(L<R&&(Q[R].y-Q[R-1].y)*(q.x-Q[R].x)>(q.y-Q[R].y)*(Q[R].x-Q[R-1].x))R--;
Q[++R]=q;
}
il ll query(ll k){
while(L<R&&k*(Q[L+1].x-Q[L].x)>Q[L+1].y-Q[L].y)L++;
return Q[L].y-Q[L].x*k;
}
int main()
{
n=read();
for(RG int i=1;i<=n;i++)s[i].a=read(),s[i].b=read();
sort(s+1,s+n+1,cmp);
for(RG int i=1;i<=n;i++)
if(!m||s[i].a<s[m].a&&s[i].b>s[m].b)s[++m]=s[i];
insert((node){-s[1].a,0});
for(RG int i=1;i<=m;i++){
f[i]=query(s[i].b);
insert((node){-s[i+1].a,f[i]});
}
printf("%lld\n",f[m]);
return 0;
}
[USACO08MAR]土地征用Land Acquisition的更多相关文章
- 洛谷 P2900 [USACO08MAR]土地征用Land Acquisition 解题报告
P2900 [USACO08MAR]土地征用Land Acquisition 题目描述 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选 ...
- 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)
洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...
- [LuoguP2900] [USACO08MAR]土地征用(Land Acquisition)
土地征用 (Link) 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些土地中最大的长 乘以最大的宽.比 ...
- luogu P2900 [USACO08MAR]土地征用Land Acquisition
写这道题时,预处理部分少打了等号,吓得我以为斜率优化错了或者被卡精了 mmp 首先有一个很明显的结论(逃),就是一个土地如果长(\(x\))与宽(\(y\))都比另一个土地小,那么这个土地一定可以跟那 ...
- 【洛谷 P2900】 [USACO08MAR]土地征用Land Acquisition(斜率优化,单调栈)
题目链接 双倍经验 设\(H\)表示长,\(W\)表示宽. 若\(H_i<H_j\)且\(W_i<W_j\),显然\(i\)对答案没有贡献. 于是把所有点按\(H\)排序,然后依次加入一个 ...
- 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(斜率优化)
题意 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些土地中最大的长 乘以最大的宽.比如约翰并购一块3 ...
- P2900 [USACO08MAR]土地征用Land Acquisition
\(\color{#0066ff}{ 题目描述 }\) 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些 ...
- Luogu 2900 [USACO08MAR]土地征用Land Acquisition
斜率优化dp. 首先发现如果存在$x$和$y$使得$len(x) \geq len(y)$并且$wid(x) \geq wid(y)$,那么$y$直接不考虑就好了,因为在买$x$的时候就把$y$顺便带 ...
- 洛谷2900 [USACO08MAR]土地征用Land Acquisition (斜率优化+dp)
自闭的一批....为什么斜率优化能这么自闭. 首先看到这个题的第一想法一定是按照一个维度进行排序. 那我们不妨直接按照\(h_i\)排序. 我们令\(dp[i]\)表示到了第\(i\)个矩形的答案是多 ...
随机推荐
- Java中调用存储过程或函数
//?代表一个参数,多个参数用逗号隔开 CallableStatement cs = connect.prepareCall("{?=call 存储过程名称或函数名(?)}"); ...
- Thinkphp5所有页面验证用户是否登陆
新建Base.php控制器,所有的页面继承自它 <?php namespace app\index\controller; use think\Controller; class Base ex ...
- python 装饰器 回顾 及练习
# 复习 # 讲作业 # 装饰器的进阶 # functools.wraps # 带参数的装饰器 # 多个装饰器装饰同一个函数 # 周末的作业 # 文件操作 # 字符串处理 # 输入输出 # 流程控制 ...
- QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)
QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ) 2018年7月7日 20:29 拥塞:是指当前供给资源相对于正常转发处理需要资源的不足,从而导致服务质量下降的一种现象 拥塞管理概述: ...
- Python3 os模块&sys模块&hashlib模块
''' os模块 非常重要的模块 ''' import os # print(os.getcwd()) # 获取当前工作目录 # os.chdir(r'路径名') # 改变当前工作目录 # print ...
- IDEA Java Web(Spring)项目从创建到打包(war)
创建Maven管理的Java Web应用 创建新项目,"create new project",左侧类型选择"maven",右侧上方选择自己的SDK,点击&qu ...
- 2426: [HAOI2010]工厂选址
2426: [HAOI2010]工厂选址 链接 代码: /* 贪心: 奇妙!!!!! 因为所有的煤矿不是给新厂,就是给旧厂(而且旧厂的得到b) 为了使费用最小,感性的理解,那么一个煤矿给哪个厂,取决于 ...
- 「暑期训练」「基础DP」FATE(HDU-2159)
题意与分析 学习本题的时候遇到了一定的困难.看了题解才知道这是二重背包.本题的实质是二重完全背包.二维费用的背包问题是指:对于每件物品,具有两种不同的费用,选择这件物品必须同时付出这两种代价:对于每种 ...
- 从底层带你理解Python中的一些内部机制
下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成 ...
- dell raid配置
常用查看命令:待有dell裸机环境会详细列出 megacli -LDInfo -Lall -aALL 查raid级别 megacli -AdpAllInfo -aALL 查raid卡信息 megacl ...