BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
题意:
给你一些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)相关推荐
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...
- BZOJ 1597 [Usaco2008 Mar] 土地购买
题意:中文题意,自行理解: 思路:这个题和hdu 1300 的题很像,算是一种类似于二维的扩展,题目不是很难,但窝发现网上的一些题解有些地方说的不是很清楚,在计算斜率优化式的时候,tzw大牛的博客里适 ...
- 决策单调性Ⅱ:斜率优化(1597: [Usaco2008 Mar]土地购买)
决策单调性Ⅰ:四边形不等式: http://blog.csdn.net/jaihk662/article/details/78174717 决策单调性: 对于dp[i] = min(dp[i], dp ...
- [bzoj] 1597 土地购买 || 斜率优化dp
原题 农夫John准备扩大他的农场,他正在考虑N块长方形的土地. 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. FJ ...
- 【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3601 Solved: 1322 Descri ...
- bzoj1597[Usaco2008 Mar]土地购买
bzoj1597[Usaco2008 Mar]土地购买 题意: n块土地,现在要求把土地分成几份,每份费用为该份中土地长最大值和宽最大值成绩,要求最小费用.n≤5000 题解: 当一块土地长宽都比另一 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化dp
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
最新文章
- Paddington2
- luoguP1082同余方程
- 当装了两个tomcat后,如何修改tomcat端口
- Apache出现AH00558错误解决办法
- Hadoop(四)hdfs基本操作
- 从零开始的全栈工程师——underscore
- linux多线程调度设置
- 音视频基础之YUV格式
- 第22篇 项目进度管理__计划评审技术__重点内容
- matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
- h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?...
- 省市县行政区划代码sql及源地址
- Java开源在线商城系统 ostocy-jshop
- noip2011 公交观光
- ESD:“蓝灯“精灵如何对抗27KV空气式放电
- 攻击者对 Exploit-DB平台的利用分析
- 【 Kotlin 脚本编程Kotlin Scripting 】Linux Shell 脚本与Kotlin Scripting
- U盘被识别为其他设备(显示U盘图标但是不显示盘符)的解决办法
- FPGA基础入门【12】开发板USB鼠标控制
- 网站服务器防火墙关闭吗,网站防火墙怎么关
热门文章
- 意超级杯尤文小胜AC米兰 C罗获转会后首个冠军
- 8个让DevOps转型取得成功的关键步骤
- Discrete Logging ZOJ - 1898 (模板题大小步算法)
- 细粒度图像分析进展综述(转)
- 二层交换机的安全方案与实施
- proxool,好东西
- 装Windows 8 过程中遇到的问题,及解决方案
- ICPC China Nanchang National Invitational -- D. Match Stick Game(dp)
- ajax error的报错提示
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)