1597: [Usaco2008 Mar]土地购买

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3601  Solved: 1322

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

4
100 1
15 15
20 5
1 100

输入解释:

共有4块土地.

Sample Output

500

HINT

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

【分析】

   

  因为要买所有土地,所以如果一个矩形完全被另一个矩形包含,那么可以不考虑小的那个矩形。

  去掉他们只有按照长x升序排序,可以发现宽y都是降序的(不然会被去掉),所以容易知道我们每次取的一组都是连续的一段。

  设答案为f[i]

  则f[i]=x[i]*y[j+1]+f[j] 得到斜率优化标准式子,维护一个左下凸包。

代码如下:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cmath>
 8 using namespace std;
 9 #define Maxn 50010
10 #define LL long long
11
12 struct hp
13 {
14     LL x,y;
15 }a[Maxn];
16
17 bool cmp(hp x,hp y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);}
18
19 struct node
20 {
21     LL x,y;
22 }t[Maxn];
23
24 LL f[Maxn];
25
26 bool check(int x,int y,int k)
27 {
28     LL kk=k;
29     return kk*(t[x].x-t[y].x)<=t[x].y-t[y].y;
30 }
31
32 bool check2(int x,int y,int z)
33 {
34     return (t[y].x-t[z].x)*(t[x].y-t[y].y)<=(t[x].x-t[y].x)*(t[y].y-t[z].y);
35 }
36
37 int main()
38 {
39     int n;
40     scanf("%d",&n);
41     for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
42     sort(a+1,a+1+n,cmp);
43     int cnt=0;
44     for(int i=1;i<=n;i++)
45     {
46         while(cnt>0&&a[i].y>=a[cnt].y) cnt--;
47         a[++cnt]=a[i];
48     }
49     int len=0,st;
50     t[++len].x=a[1].y;t[len].y=0;st=1;
51     for(int i=1;i<=cnt;i++)
52     {
53         while(st<len&&check(st,st+1,-a[i].x)) st++;
54         f[i]=a[i].x*t[st].x+t[st].y;
55         t[0].x=a[i+1].y;t[0].y=f[i];
56         while(st<len&&check2(len-1,len,0)) len--;
57         t[++len]=t[0];
58     }
59     printf("%lld\n",f[cnt]);
60     return 0;
61 }

[BZOJ 1597]

2016-09-19 20:15:26

转载于:https://www.cnblogs.com/Konjakmoyu/p/5886483.html

【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)相关推荐

  1. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...

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

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

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

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

  4. bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】

    按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...

  5. BZOJ 1597 [Usaco2008 Mar] 土地购买

    题意:中文题意,自行理解: 思路:这个题和hdu 1300 的题很像,算是一种类似于二维的扩展,题目不是很难,但窝发现网上的一些题解有些地方说的不是很清楚,在计算斜率优化式的时候,tzw大牛的博客里适 ...

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

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

  7. bzoj1597[Usaco2008 Mar]土地购买

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

  8. BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)

    题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...

  9. bzoj1597 [Usaco2008 Mar]土地购买

    题目描述 题解: 我们可以考虑这样一种情况,有一块$10*10$的土地,还有一块$1*1$的土地. 当然将$1*1$的土地合到$10*10$的土地中了. 所以我们可以先按土地$x$值从大到小排序,然后 ...

最新文章

  1. 区块链膨胀:以太坊客户如何解决存储问题
  2. 项目集跟进计划_项目延期,项目经理应该如何补救?
  3. 过滤器实例——字符编码Filter
  4. python的烦恼_还在为每天忘记签到而烦恼吗?python来帮你搞定!
  5. CentOS搭建FTP
  6. 标准输入流和输出流分别是啥,高效字符流的方法
  7. nodejs中文件,目录的操作(1)
  8. CentOS Linux解决Device eth0 does not seem to be present【转】
  9. Hibernate组件作为Map索引(四)
  10. 怎么用便签在手机上记事?
  11. ​LeetCode刷题实战507:完美数
  12. 深入理解搜索引擎-排序算法
  13. 黎曼猜想--黎曼1859年《论小于某给定值的素数的个数》
  14. 0-1背包问题和背包问题
  15. 100M和1000M网线做法
  16. 关系代数之专门的关系运算(选择、投影)
  17. TMS Workflow Studio2.12框架,用户也可以创建工作流
  18. 函数参数传递三种方式(传值方式,地址传递,引用传递)
  19. UDP Flood攻击
  20. 一个Arial.ttf 找不到的异常的处理

热门文章

  1. sdut 2074 区间覆盖问题(贪心)
  2. 图解算法学习笔记(七):狄克斯特拉算法
  3. html5引擎笔试题,最新!HTML5经典面试题型(附答案)
  4. boot lib分离 spring_spring boot + gradle打包bootJar分离lib
  5. linux emacs配置文件,[z]使用.emacs.d目录管理Emacs配置文件
  6. applicationContext.xml
  7. Oracle利用序列实现自动增长列
  8. 京东华为 Java开发历年经典题汇总
  9. leetcode374. 猜数字大小
  10. Arrays工具类常见方法