题面在这里

题意

约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地。
如果约翰单买一块土地,价格就是土地的面积,但他可以选择并购一组土地,
并购的价格为这些土地中最大的长乘以最大的宽。
给定每份土地的尺寸,请你帮助他计算购买所有土地所需的最小费用。

数据范围

\[1 \le N \le 50000,1 \le width_i,length_i\le 10^6\]

sol

我们发现,如果一块土地被另一块土地所包含(即长和宽都比另一块土地小),
那么只需购买那另一块土地即可,于是我们可以据此筛掉其他的土地,
只剩下一些长度递减,宽度递增的土地

然后我们猜想FJ每次购买的一组土地肯定是这个序列连续的一段
(假设某种最优方案中购买的土地不是一段,那么将中间的部分补上显然不会更劣)

于是就变成了经典的序列分段问题,
设\(f[i]\)表示购买前\(i\)块土地所需的最小代价,我们有
\[f[i]=min_{j=0}^{i-1}(f[j]+length[j]\times width[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;
}

转载于:https://www.cnblogs.com/cjfdf/p/8645621.html

[USACO08MAR]土地征用Land Acquisition相关推荐

  1. P2900 [USACO08MAR]土地征用Land Acquisition(斜率优化)

    题目描述 Farmer John is considering buying more land for the farm and has his eye on N (1 <= N <= ...

  2. 【文文殿下】 [USACO08MAR]土地征用 题解

    题解 斜率优化裸题. 有个很玄学的事情,就是我用\(f[i]=min\{f[j-1]+p[j].y*p[i].x\}\) 会很奇怪的Wa . 明明和\(f[i]=min\{f[j]+p[j+1].y* ...

  3. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  4. 非导向传输媒体| 计算机网络

    Transmission media can be categorized in two ways, 传输媒体可以通过两种方式进行分类: Guided Transmission Media 引导传输媒 ...

  5. 【论文阅读】Automatic Updating of Land Cover Maps in Rapidly Urbanizing Region

    文章名称: Automatic Updating of Land Cover Maps in Rapidly Urbanizing Regions by Relational Knowledge Tr ...

  6. Google Earth Engine ——GCOM-C 进行长期和持续的全球陆地地表温度数据集(JAXA/GCOM-C/L3/LAND/LST/V1)

    本产品是陆地表面的温度. 更新版本的 JAXA/GCOM-C/L3/LAND/LST/V2也可用于此数据集,该数据集使用此算法进行处理. GCOM-C 进行长期和持续的全球观测和数据收集,以阐明辐射收 ...

  7. Google Earth Engine ——GCOM-C 进行长期和持续的陆地地表温度数据集(JAXA/GCOM-C/L3/LAND/LAI/V2)

    本产品是陆地表面的温度. 更新版本的 JAXA/GCOM-C/L3/LAND/LST/V2也可用于此数据集,该数据集使用此算法进行处理. GCOM-C 进行长期和持续的全球观测和数据收集,以阐明辐射收 ...

  8. Google Earth Engine ——GCOM-C 进行长期和持续的全球叶面积指数数据集(JAXA/GCOM-C/L3/LAND/LAI/V2)

    此乘积为单位地面面积的单面绿叶面积之和.这是一个持续的数据集,延迟为 3-4 天,目前只有 2020 年的数据可用.供应商已经发布了重新处理整个积压工作的时间表.GCOM-C 进行长期和持续的全球观测 ...

  9. 洛谷P2904 [USACO08MAR]跨河River Crossing 动态规划

    洛谷P2904 [USACO08MAR]跨河River Crossing 动态规划 区间DP f[ i ] 表示 将 i 头牛 运了过去,然后John 又返回所需要的最少时间 1 #include & ...

最新文章

  1. POJ-1041 John's trip
  2. [SCOI2008]着色方案
  3. Vue实现禁止链接打开
  4. C#基础巩固之基础类型
  5. Hadoop-Flume-类比吸尘器图解
  6. cannot resolve symbol xxxx问题
  7. debian webmin 安装
  8. memcached mysql 类_mysql有没有类似和memcached里那样的CAS版本控制?
  9. linux 单机跨进程通信
  10. H.264码流解析 一个SPS的nalu及获取视频的分辨率
  11. Ubuntu 16.04 安装 搜狗输入法 sogou input
  12. innerHTML、innerText 和 outerHTML 区别
  13. java验证码问题(不区分大小写)
  14. 值得终身背诵的道家名言50句,拔高人生境界
  15. html微博登录代码,微博第三方登陆js实现
  16. linux环境下解压压缩包失败
  17. 某项目的双代号网络图如下所示_某工程项目的双代号网络计划如下图所示(时间单位:月)。...
  18. 谁发明了区块链?谁是中本聪?
  19. The server time zone value ‘� й ��� ׼ʱ ��‘ is unrecognized or represents more than one time zone.
  20. css实现波浪球效果图,用css实现圆形波浪效果图

热门文章

  1. TiDB 增加 MySQL 内建函数
  2. jquery 设置select的默认值
  3. ×××送通知服务教程 Apple Push Notification Services Tutorial
  4. ping命令linux软件包,linux下安装 ping 命令
  5. java jqgrid treegrid_JqGrid中文文档之TreeGrid
  6. metrics类型 普罗米修斯_AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控...
  7. python读取多通道信号中的一个通道_RFID多通道读写器的具体应用
  8. Zookeeper集群详解
  9. PostgreSQL 12系统表(11)pg_user
  10. Hybrid Data Fusion (HDF)——数据融合