题意:

给你一些x*y的土地,分成一组一组购买土地,其代价为这组里的max{x}*max{y},问你全部买下最少多少钱

思路:

有一个土地为x1*y1,如果存在一个x2*y2,且x1<=x2&&y1<=y2,那么我们就不需要考虑x1*y1的土地了

这样我们可以处理出一个x单调递增,同时y单调递减的数组

显然可以看出,每一组购买的土地应该是这个数组中连续的一段

简单证明:在购买的一组土地总量不变的情况下,该组购买方案为一个单独的x1*y1再加上数组中一段连续的土地[l,r],那么max{x}=a[r].x,而max{y}=y1

此时一定存在连续的[l-1,r],其max{y}=a[l-1].y<y1,比选择x1*y1更优,所以应该选连续的一段

所以我们根据新数组,可以写出dp方程:

f[i]=min(f[j]+a[i].x*a[j+1].y)

斜率优化即可

由于a[j+1].y单调递增,我们只需要单调队列维护一个下凸壳

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
//#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>#define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1using namespace std;typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int       ,int> PI;
typedef pair<ll,ll> PLL;const db eps = 1e-6;
const int mod = 998244353;
const int maxn = 2e6+100;
const int maxm = 2e6+100;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
//const db pi = acos(-1.0);int n;
PLL a[maxn],b[maxn];
ll f[maxn];
int q[maxn];
bool cmp(PLL a, PLL b){return a.fst==b.fst?a.sc<b.sc:a.fst<b.fst;}
int main(){scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%lld%lld", &a[i].fst, &a[i].sc);}sort(a+1,a+1+n,cmp);int tot=0;for(int i = 1; i <= n; i++){while(tot&&a[i].sc>=b[tot].sc)tot--;b[++tot]=a[i];}int l=0,r=0;for(int i = 1; i <= tot; i++){while(l<r&&(f[q[l+1]]-f[q[l]])<=b[i].fst*(b[q[l]+1].sc-b[q[l+1]+1].sc))l++;int j = q[l];f[i]=f[j]+b[i].fst*b[j+1].sc;while(l<r&&(f[q[r]]-f[q[r-1]])*(b[q[r]+1].sc-b[i+1].sc)>=(f[i]-f[q[r]])*(b[q[r-1]+1].sc-b[q[r]+1].sc))r--;q[++r]=i;}printf("%lld",f[tot]);return 0;
}
/*
4
100 1
15 150
20 5
1 100*/

转载于:https://www.cnblogs.com/wrjlinkkkkkk/p/11312056.html

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

  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. [bzoj] 1597 土地购买 || 斜率优化dp

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

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

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

  9. bzoj1597[Usaco2008 Mar]土地购买

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

  10. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化dp

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

最新文章

  1. Paddington2
  2. luoguP1082同余方程
  3. 当装了两个tomcat后,如何修改tomcat端口
  4. Apache出现AH00558错误解决办法
  5. Hadoop(四)hdfs基本操作
  6. 从零开始的全栈工程师——underscore
  7. linux多线程调度设置
  8. 音视频基础之YUV格式
  9. 第22篇 项目进度管理__计划评审技术__重点内容
  10. matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
  11. h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?...
  12. 省市县行政区划代码sql及源地址
  13. Java开源在线商城系统 ostocy-jshop
  14. noip2011 公交观光
  15. ESD:“蓝灯“精灵如何对抗27KV空气式放电
  16. 攻击者对 Exploit-DB平台的利用分析
  17. 【 Kotlin 脚本编程Kotlin Scripting 】Linux Shell 脚本与Kotlin Scripting
  18. U盘被识别为其他设备(显示U盘图标但是不显示盘符)的解决办法
  19. FPGA基础入门【12】开发板USB鼠标控制
  20. 网站服务器防火墙关闭吗,网站防火墙怎么关

热门文章

  1. 意超级杯尤文小胜AC米兰 C罗获转会后首个冠军
  2. 8个让DevOps转型取得成功的关键步骤
  3. Discrete Logging ZOJ - 1898 (模板题大小步算法)
  4. 细粒度图像分析进展综述(转)
  5. 二层交换机的安全方案与实施
  6. proxool,好东西
  7. 装Windows 8 过程中遇到的问题,及解决方案
  8. ICPC China Nanchang National Invitational -- D. Match Stick Game(dp)
  9. ajax error的报错提示
  10. 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)