题目链接

因为题目说可以分组,并且是求最值,所以斜率优化应该是可以搞的,现在要想怎么排序使得相邻的数在一个组中最优。

我们按照宽$w$从小到大,高$h$从小到大排序。这时发现可以筛掉一些一定没有贡献的土地,什么样的土地没有贡献呢?这样的:$h[i]<=h[j]\& \&w[i]<=w[j]$,此时i没有贡献。

所以排序并筛掉无用的土地后,剩余的土地是按照$w[i]<  w[j]< w[k]\& \&h[i]> h[j]>h[k]$ $(i<j<k)$

这时候我们的最优分组一定是选择连续的土地为一组。因为如果i和k一组,j一组,则此时的花费是$h[i]*w[k]+h[j]*w[j]$

而选择$i,j,k$一组,则花费为$h[i]*w[k]$

所以此时有$O(n^{2})$的$dp$:

$dp[i]$为前$i$块土地的最少花费,$dp[i]=max(dp[i],dp[j]+h[j+1]*w[i])$。

但是复杂度不允许QAQ

所以推式子:

设$k<j<i$,且i从j转移比从k转移更优。

$dp[j]+h[j+1]*w[i]\leq dp[k]+h[k+1]*w[i]$

$dp[j]-dp[k]\leq (h[k+1]-h[j+1])*w[i]$

$\tfrac{dp[j]-dp[k]}{h[k+1]-h[j+1]}\leq w[i]$

$\tfrac{dp[j]-dp[k]}{h[j+1]-h[k+1]}\geq- w[i]$

将$(h[j+1],dp[j]),(h[k+1],dp[k])$看成二维平面的点,因为$k<j\& \&h[k+1]>h[j+1]$,所以点集应该是从左往右。

维护一个单调队列,如果当前点为$i$,队首为$L$,则如果$L$没有$L+1$到$i$更优,则队首出队。当前最优点为队首。同时还要维护队尾。

PS:因为以前吃过精度的坑,所以写斜率优化基本是移相相乘。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 5e4 + 100;
 5 struct node {
 6     ll w, h;
 7 }a[maxn], b[maxn];
 8 bool cmp(node x, node y) {
 9     return x.w == y.w ? x.h < y.h : x.w < y.w;
10 }
11 ll dp[maxn]; int q[maxn];
12 ll check1(int j, int k) {
13     return dp[j] - dp[k];
14 }
15 ll check2(int j, int k) {
16     return b[j + 1].h - b[k + 1].h;
17 }
18 int main() {
19     int n, cnt = 0;
20     scanf("%d", &n);
21     for (int i = 1; i <= n; i++)
22         scanf("%lld%lld", &a[i].w, &a[i].h);
23     sort(a + 1, a + 1 + n, cmp);
24     for (int i = 1; i <= n; i++) {
25         while (cnt != 0 && b[cnt].h <= a[i].h)
26             cnt--;
27         b[++cnt] = a[i];
28     }
29     int l = 0, r = 0;
30     for (int i = 1; i <= cnt; i++) {
31         while (l < r && check1(q[l], q[l + 1]) >= -b[i].w * check2(q[l], q[l + 1]))
32             l++;
33         dp[i] = dp[q[l]] + b[q[l] + 1].h * b[i].w;
34         while (l < r && check1(q[r - 1], q[r]) * check2(q[r], i) <= check1(q[r], i) * check2(q[r - 1], q[r]))
35             r--;
36         q[++r] = i;
37     }
38     printf("%lld\n", dp[cnt]);
39 }

转载于:https://www.cnblogs.com/sainsist/p/11563980.html

[Bzoj1597][Usaco2008 Mar]土地购买(斜率优化)相关推荐

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

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

  2. bzoj1597[Usaco2008 Mar]土地购买

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

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

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

  4. bzoj1597 [Usaco2008 Mar]土地购买

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

  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 MB Submit: 3601  Solved: 1322 Descri ...

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

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

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

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

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

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

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

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

最新文章

  1. guava入门学习2(新集合)
  2. how to rank conferences or journals?
  3. 银隆新能源:涉嫌诈骗财政资金过亿 孙国华等人被刑拘
  4. 李迟2011年4月知识积累
  5. GameObject.Find() 和 Transform.Find()的区别
  6. 电子书下载:Beginning ASP.NET 2.0 and Databases
  7. 动态规划:完全背包问题
  8. 网站视频倍速播放和进度自定义调整
  9. java setw_C++ setw:格式化输出(详解版)
  10. 酷狗及一些播放软件收费歌曲下载方法
  11. 征途服务器文件,征途端游服务器地址
  12. 2018-2019赛季多校联合新生训练赛第七场补题和题解(中石油)
  13. SpringBoot 2 访问 Neo4j 图数据库
  14. latex中公式编辑,一行多个公式
  15. 智云通CRM:采购决策有哪些关键节点?
  16. 华为硬件工程师社招机考题库_华为硬件工程师笔试、面试题
  17. 剑指Offer三天挑战赛03~15
  18. 计算机教育学专业考研科目,计算机考研科目和专业
  19. java是否过于笨重?
  20. ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

热门文章

  1. 收藏!本、硕、博、程序员必备神器
  2. python psutil 获取命令历史_python中系统信息获取psutil使用
  3. Debian Buster Nginx 布署 Brophp 项目(类 Thinkphp)
  4. 两分钟实现安全完备的登录模块
  5. 【Zookeeper】源码分析之Watcher机制(一)
  6. 开源项目也要讲注意力经济
  7. ubuntu 更新源 或者 apt-get install 出错404 not found ,Failed to fetch
  8. jQuery学习_具备吸附功能的拖曳框
  9. 10.23T1 杨辉三角
  10. webpack配置信息说明