\(\color{#0066ff}{ 题目描述 }\)

约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地。如果约翰单买一块土 地,价格就是土地的面积。但他可以选择并购一组土地,并购的价格为这些土地中最大的长 乘以最大的宽。比如约翰并购一块3 × 5和一块5 × 3的土地,他只需要支付5 × 5 = 25元, 比单买合算。 约翰希望买下所有的土地。他发现,将这些土地分成不同的小组来并购可以节省经费。 给定每份土地的尺寸,请你帮助他计算购买所有土地所需的最小费用。

\(\color{#0066ff}{输入格式}\)

Line 1: A single integer: N

Lines 2..N+1: Line i+1 describes plot i with two space-separated integers: \(width_i\) and \(length_i\)

\(\color{#0066ff}{输出格式}\)

Line 1: The minimum amount necessary to buy all the plots.

\(\color{#0066ff}{输入样例}\)

4
100 1
15 15
20 5
1 100 

\(\color{#0066ff}{输出样例}\)

500 

\(\color{#0066ff}{数据范围与提示}\)

none

\(\color{#0066ff}{题解}\)

首先可以发现,对于两个矩形, 如果一个可以完全包含另一个,完全可以让这两个一组,这样那个小的矩形就没贡献了,可以删掉

按长为第一关键字,宽为第二关键字从小到大排序

倒着扫一遍,维护max宽,如果当前矩形的宽小于max宽,又因为排序一定小于长

所以当前矩形就没用了,否则放入一个新的数组里

翻转一下可以发现

这个数组的矩形,长递增,宽递减

最优的分组一定是几个连续的区间

可以发现一个区间的价值是l的长和r的宽

如果不连续,那么价值要比这个大

所以就可以DP了

\(f[i] = f[j-1]+i_a*j_b\)

把\(i_a\)作为斜率移到左边,因为是负的,而且还要维护最小值,斜率应为正的

可以直接取正的维护最大值然最后取反就行了

#include<bits/stdc++.h>
#define LL long long
LL in() {char ch; int x = 0, f = 1;while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));return x * f;
}
const int maxn = 50505;
using std::pair;
using std::make_pair;
pair<LL, LL> mp[maxn], a[maxn];
int cnt;
LL f[maxn];
LL X(int x) { return a[x + 1].second; }
LL Y(int x) { return f[x]; }
double K(int x, int y) { return (double)(Y(x) - Y(y)) / (double)(X(x) - X(y)); }
int main() {int n = in();for(int i = 1; i <= n; i++) mp[i].first = in(), mp[i].second = in();std::sort(mp + 1, mp + n + 1);LL max = 0;for(int i = n; i >= 1; i--) {if(mp[i].second > max) a[++cnt] = mp[i];max = std::max(max, mp[i].second);}std::reverse(a + 1, a + cnt + 1);static int q[maxn], head, tail;for(int i = 1; i <= cnt; i++) {LL k = a[i].first;while(head < tail && k > K(q[head], q[head + 1])) head++;f[i] = f[q[head]] - a[i].first * a[q[head] + 1].second;while(head < tail && K(q[tail], q[tail - 1]) > K(i, q[tail - 1])) tail--;q[++tail] = i;}printf("%lld\n", -f[cnt]);return 0;
}

转载于:https://www.cnblogs.com/olinr/p/10227089.html

P2900 [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]土地征用Land Acquisition

    题面在这里 题意 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地. 如果约翰单买一块土地,价格就是土地的面积,但他可以选择并购一组土地, 并购的价格为这些土地中最大的长乘以最大的宽. 给定每 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. linux mariadb
  2. 区块链在天猫国际商品溯源中的应用
  3. LUA string的状态
  4. Unicode® Character Name Index
  5. poj 3693 后缀数组
  6. P1 Human Pose Estimation人体姿态综述估计调研
  7. 改革春风吹满地,安卓新系统Q上线腾讯WeTest
  8. TensorFlow发布语音识别入门教程,附1GB数据集代码
  9. IntelliJ IDEA 破解
  10. java读取pdf文档
  11. 如何删除计算机guest用户,windows xp系统怎么删除Guest用户
  12. 大数据分析你不能不懂的6个核心技术
  13. matlab求时频分布图,Matlab时频分析TFD程序集(时频分布、chirplet分解、变形分数傅立叶变换)源代码...
  14. 二分图匹配Hopcroft-Carp算法介绍
  15. 参加老同学蒋坤元新书发布会(4)
  16. 晶振(crystal)与谐振荡器(oscillator)
  17. SQL Server数据库通过身份证号获取年龄段分布
  18. ery validator addMethod 方法的使用
  19. 代码签名证书过期,Mozilla数百万Firefox用户遭遇扩展禁用
  20. bzoj4627[BeiJing2016]回转寿司

热门文章

  1. Python学习路程-常用设计模式学习
  2. 有向图强连通分支的Tarjan算法讲解 + HDU 1269 连通图 Tarjan 结题报告
  3. 转 jquery使用技巧小结
  4. JavaScript中的标识符(附:关键字表)
  5. 人民日报:研究生期间该懂的47件事,你认可吗?
  6. 一文总结熵,交叉熵与交叉熵损失
  7. 论发SCI论文和生孩子的共同点:那我这篇怀的也太久了!
  8. 每日算法系列【LeetCode 329】矩阵中的最长递增路径
  9. 论文赏析[TACL17]基于中序转移的成分句法分析
  10. 数据科学包13-实例2:时间事件日志