[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=1597

[算法]

首先将所有土地按长为第一关键字 , 宽为第二关键字排序

显然 , 当i > j , 且yi >= yj时 , 土地j没有用 , 不妨使用单调栈弹出所有没有用的土地

用fi表示前i块土地的最小经费

显然 , fi = min{ fj + aibj }

斜率优化即可

时间复杂度 : O(N)

[代码]

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define N 50010
  4. typedef long long ll;
  5. typedef long double ld;
  6. typedef unsigned long long ull;
  7. const ll inf = 1e18;
  8.  
  9. struct info
  10. {
  11. ll x , y;
  12. } a[N];
  13.  
  14. ll n , l , r , top;
  15. ll f[N];
  16. ll q[N] , X[N] , Y[N] , s[N];
  17.  
  18. template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
  19. template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
  20. template <typename T> inline void read(T &x)
  21. {
  22. T f = ; x = ;
  23. char c = getchar();
  24. for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
  25. for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
  26. x *= f;
  27. }
  28. inline bool cmp(info a , info b)
  29. {
  30. if (a.x != b.x) return a.x < b.x;
  31. else return a.y < b.y;
  32. }
  33.  
  34. int main()
  35. {
  36.  
  37. read(n);
  38. for (int i = ; i <= n; i++)
  39. {
  40. read(a[i].x);
  41. read(a[i].y);
  42. }
  43. sort(a + , a + n + , cmp);
  44. for (int i = ; i <= n; i++)
  45. {
  46. while (top > && a[i].y >= a[s[top]].y) --top;
  47. s[++top] = i;
  48. }
  49. for (int i = ; i < top; i++)
  50. X[i] = -a[s[i + ]].y;
  51. q[f[l = r = ] = ] = ;
  52. for (int i = ; i <= top; i++)
  53. {
  54. while (l < r && Y[q[l + ]] - Y[q[l]] <= a[s[i]].x * (X[q[l + ]] - X[q[l]])) ++l;
  55. f[i] = f[q[l]] - a[s[i]].x * X[q[l]];
  56. Y[i] = f[i];
  57. while (l < r && (Y[i] - Y[q[r]]) * (X[q[r]] - X[q[r - ]]) <= (Y[q[r]] - Y[q[r - ]]) * (X[i] - X[q[r]])) --r;
  58. q[++r] = i;
  59. }
  60. printf("%lld\n" , f[top]);
  61.  
  62. return ;
  63.  
  64. }

[USACO 2008 MAR] 土地购买的更多相关文章

  1. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  2. 1597: [Usaco2008 Mar]土地购买

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4023  Solved: 1470[Submit] ...

  3. 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2474  Solved: 900[Submit][ ...

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

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

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

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

  6. BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4989  Solved: 1847[Submit] ...

  7. bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5524  Solved: 2074[Submit] ...

  8. 【bzoj1597】[Usaco2008 Mar]土地购买

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3739  Solved: 1376[Submit] ...

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

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

随机推荐

  1. jmeter源码编译

    转载:http://blog.csdn.net/wanglha/article/details/42004943 一.下载源码 git clone git://github.com/apache/jm ...

  2. Qt中QVector与QList的应用

    首先來看看QVector 的基本使用方式,建立一個可容納兩個元素的QVector ,並使用索引方式存取元素值:QVector<double> vect(2); vect[0] = 1.0; ...

  3. python 使用cx-freeze打包程序

    python环境 3.6.5      win7   linux环境同理 先尝试了PyInstaller   ,打包时一直提示 no module named gtk   而gtk 又依赖pygobj ...

  4. [Algorithms] Tree Data Structure in JavaScript

    In a tree, nodes have a single parent node and may have many children nodes. They never have more th ...

  5. 算法 binary search

    // ------------------------------------------------------------------------------------------------- ...

  6. Odoo车辆管理

    odoo车辆管理用于管理公司用车,可以记录以下信息 车辆 车辆的服务合同 车辆的里程 车辆的服务记录 车辆的成本         使用之前,先要进行基本设置     基础设置 维护车辆型号 即维护车辆 ...

  7. Node.js 是什么

    Node.js 是什么 一个 “编码就绪” 服务器 Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理 ...

  8. systemd、upstart和system V

    http://blog.csdn.net/kumu_linux/article/details/7653802  systemd是Linux下的一种init软件,由Lennart Poettering ...

  9. ElasticSearch 分页检索

    在ElasticSearch的多索引和多类别里说到我们在集群中有14个文档匹配我们的(空)搜索语句.单数仅仅有10个文档在hits数组中.我们怎样看到其它文档? 和SQL使用LIMITkeyword返 ...

  10. 设置Activity进入退出动画

    http://blog.csdn.net/tenpage/article/details/7792689 http://blog.csdn.net/lnb333666/article/details/ ...