题目描述
农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地。
每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000)。
每块土地的价格是它的面积,但FJ可以同时购买多快土地。
这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换。
如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25。
FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费。 他需要你帮助他找到最小的经费。

输入
* 第1行: 一个数: N
* 第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽

输出
* 第一行: 最小的可行费用。

样例输入
4
100 1
15 15
20 5
1 100
样例输出
500

提示
输出解释:

FJ分3组买这些土地: 第一组:100x1, 第二组1x100, 第三组20x5 和 15x15 plot. 每组的价格分别为100,100,300, 总共500.

【思路】因为介于最大的长和最大的宽之间的矩形可以直接删去,因此维护一个队列长x递增宽y递减。f [ i ]=min( f [ j ]+a[ i ]* b[ j+1 ] ),可以看成z=y+ k*x,其中对于已知的i斜率k是已知的,z的最小值在直线与图形的第一个相切的地方取到。又x是递减y是递增,满足左下的凸包,维护这个凸包,每次从l开始把斜率大的点删掉,加入i点时,把斜率小的删去。

【代码】

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define ll long long
#define maxn 100005
using namespace std;
struct data{int a,b;bool operator <(const data&B)const{return (a<B.a);}
}e[maxn];
int n,pos[maxn],x[maxn],y[maxn],q[maxn];
ll f[maxn];
double xie(int s,int t){return ((double)(f[s]-f[t])/(double)(y[s+1]-y[t+1]));
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d%d",&e[i].a,&e[i].b);sort(e+1,e+1+n);int cnt=0;for(int i=1;i<=n;++i){while(cnt>0 && e[i].b>=y[cnt])--cnt;x[++cnt]=e[i].a,y[cnt]=e[i].b;}int l=0,r=0;for(int i=1;i<=cnt;++i){while(l<r && xie(q[l],q[l+1])>-x[i])++l;f[i]=f[q[l]]+(ll)x[i]*(ll)y[q[l]+1];while(l<r && xie(i,q[r])>xie(q[r],q[r-1]))--r;q[++r]=i;}printf("%lld\n",f[cnt]);return 0;
}

ssoj1556土地购买相关推荐

  1. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

  2. bzoj1597[Usaco2008 Mar]土地购买

    bzoj1597[Usaco2008 Mar]土地购买 题意: n块土地,现在要求把土地分成几份,每份费用为该份中土地长最大值和宽最大值成绩,要求最小费用.n≤5000 题解: 当一块土地长宽都比另一 ...

  3. 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化

    [597][Usaco2008 Mar]土地购买 [题目描述] 有N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000 ...

  4. 【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3601  Solved: 1322 Descri ...

  5. 决策单调性Ⅱ:斜率优化(1597: [Usaco2008 Mar]土地购买)

    决策单调性Ⅰ:四边形不等式: http://blog.csdn.net/jaihk662/article/details/78174717 决策单调性: 对于dp[i] = min(dp[i], dp ...

  6. bzoj 1597 土地购买

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 < = 1,000 ...

  7. 【bzoj1597】 土地购买

    http://www.lydsy.com/JudgeOnline/problem.php?id=1597 (题目链接) 题意 购买n个矩形,每块土地的价格是它的面积,但可以同时购买多快土地. 这些土地 ...

  8. [bzoj] 1597 土地购买 || 斜率优化dp

    原题 农夫John准备扩大他的农场,他正在考虑N块长方形的土地. 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. FJ ...

  9. 【OI做题记录】【BZOJ】【Usaco2008 Mar】土地购买

    题目描述 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 ...

  10. bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...

最新文章

  1. ApacheServer-----关于443端口被占用的解决方法
  2. android Mp3播放器之音频文件扫描
  3. cordova项目适配iPhoneX
  4. 使用XSLT转换XML数据并传递参数
  5. mysql8安装版安装教程_MySQL8.0版本安装教程
  6. linux ls for 命令嵌套
  7. TLS握手、中断恢复与证书中心的原因
  8. 华为 Mate 40 系列搭载麒麟 9000 芯片;短视频平台 Quibi 宣布关闭;Node.js 15 正式版发布|极客头条
  9. JavaScript数组操作 [Z]
  10. centos YUM的升级点
  11. java开发之提高java和mysql代码性能和质量
  12. 《Ray Tracing in One Weekend》——Chapter 11: Defocus Blur
  13. 按之字形顺序打印二叉树(C++)
  14. matlab用regress方法求ln函数_高中数学必背50条秒杀型公式和方法!高一高二高三都要看!...
  15. win10专业版激活办法
  16. 解决Latex中文PDF目录出现乱码问题
  17. imx6ul spi 设备驱动开发
  18. 程序员被人喜欢的13点原因
  19. 2021-03-04 mysql in里加个参数就查不到??是JSON_EXTRACT导致的,用JSON_UNQUOTE()去掉双引号就正常了
  20. python 输出纯音频_提取视频中的音频python三行程序搞定

热门文章

  1. html js创建表格,javascript创建表格方式详解
  2. 计算机打印机图标删除吗,故障之:打印图标消失及打印任务无法取消
  3. 【软件开发规范一】《Java开发规范》
  4. 第6节 Kali Linux系统压缩与解压缩文件
  5. 土豆网电影在线观看客户端官方版
  6. matlab 数据白化,数据白化
  7. 路由器回执路由配置_如何用console线连接路由器进行初始配置-----无私奉献版(转载请注明出处)...
  8. 2007年度全世界最好的50个网站
  9. arp-scan使用
  10. Springboot毕设项目基于SpringBoot的个人理财系统ibx9hjava+VUE+Mybatis+Maven+Mysql+sprnig)