【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化
【597】[Usaco2008 Mar]土地购买
【题目描述】
有N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3×5的地和一块5×3的地,则他需要付5×5=25. FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费。
【输入格式】
第1行: 一个数: N
第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽。
【输出格式】
求最小的可行费用。
Sample Input
4
100 1
15 15
20 5
1 100
Sample Output
500
HINT
FJ分3组买这些土地: 第一组:100×1, 第二组1×100, 第三组20×5 和 15×15 plot. 每组的价格分别为100,100,300, 总共500
给定一些矩形,分组购买,一组的价格是其中最大的长*最大的宽。
n<=50000
一开始并没有思路。。。
首先,我们考虑没有贡献的矩形——对于x,如果存在a[y]>=a[x] && b[y]>=b[x],则x是无用的。排序去掉。
排序就先按x排序大到小,再按y排序大到小。
出现排序后x,y,z矩形,x能不能套y但能套z的话,那y也能套z,是不会错的。。
最后一定是a递减,b递增。
so:
f[i]=f[j]+a[j+1]*b[i]
然后用斜率优化。
这个是把除法改成乘法的。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream> 6 #include<algorithm> 7 #include<queue> 8 using namespace std; 9 10 typedef long long LL; 11 const int N=50010; 12 int n,pl,Q[N]; 13 LL l=0,r=0,ai,xj,bj,j,f[N]; 14 struct node{ 15 LL a,b; 16 bool bk; 17 }p[N]; 18 19 // f[i]=f[j]+a[j+1]*b[i] 20 // ai=b[i] 21 // xj=a[j+1] 22 // bj=f[j] 23 24 LL XX(int i,int j){return p[i+1].a-p[j+1].a;} 25 LL YY(int i,int j){return f[i]-f[j];} 26 double X(int i){return p[i+1].a;} 27 double Y(int i){return f[i];} 28 double find_k(int i,int j){return (Y(i)-Y(j))/(X(i)-X(j));} 29 30 bool cmp(node x,node y){ 31 if(x.a!=y.a) return x.a>y.a; 32 return x.b>y.b; 33 } 34 35 bool judge_1() 36 { 37 LL tx=XX(Q[l],Q[l+1]),ty=YY(Q[l],Q[l+1]); 38 if(tx>=0) return ty>=((-ai)*tx); 39 return ty<=((-ai)*tx); 40 } 41 42 bool judge_2(int i) 43 { 44 LL t0=YY(Q[r],Q[r-1]),t1=XX(Q[r],Q[r-1]),t2=YY(i,Q[r]),t3=XX(i,Q[r]); 45 if(t1<0) t0=-t0,t1=-t1; 46 if(t3<0) t2=-t2,t3=-t3; 47 return (t0*t3)<(t1*t2); 48 } 49 50 int main() 51 { 52 freopen("a.in","r",stdin); 53 // freopen("acquire.in","r",stdin); 54 // freopen("acquire.out","w",stdout); 55 scanf("%d",&n); 56 for(int i=1;i<=n;i++) 57 { 58 scanf("%lld%lld",&p[i].a,&p[i].b); 59 p[i].bk=1; 60 } 61 sort(p+1,p+1+n,cmp); 62 j=1; 63 for(int i=2;i<=n;i++) 64 { 65 if(p[i].a<=p[j].a && p[i].b<=p[j].b) p[i].bk=0; 66 else j=i; 67 } 68 pl=1; 69 for(int i=2;i<=n;i++) 70 if(p[i].bk) p[++pl]=p[i]; 71 72 for(int i=1;i<=pl;i++) 73 { 74 ai=p[i].b; 75 while(l<r && judge_1()) l++;/*find_k(Q[l],Q[l+1])>=(-ai)*/ 76 j=Q[l]; 77 xj=p[j+1].a; 78 bj=f[j]; 79 f[i]=ai*xj+bj; 80 while(l<r && judge_2(i)) r--;/*find_k(Q[r],Q[r-1])<find_k(i,Q[r])*/ 81 Q[++r]=i; 82 } 83 printf("%lld\n",f[pl]); 84 return 0; 85 }
转载于:https://www.cnblogs.com/KonjakJuruo/p/5890544.html
【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化相关推荐
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- bzoj1597[Usaco2008 Mar]土地购买
bzoj1597[Usaco2008 Mar]土地购买 题意: n块土地,现在要求把土地分成几份,每份费用为该份中土地长最大值和宽最大值成绩,要求最小费用.n≤5000 题解: 当一块土地长宽都比另一 ...
- BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)
题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...
- bzoj1597 [Usaco2008 Mar]土地购买
题目描述 题解: 我们可以考虑这样一种情况,有一块$10*10$的土地,还有一块$1*1$的土地. 当然将$1*1$的土地合到$10*10$的土地中了. 所以我们可以先按土地$x$值从大到小排序,然后 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- 【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3601 Solved: 1322 Descri ...
- 决策单调性Ⅱ:斜率优化(1597: [Usaco2008 Mar]土地购买)
决策单调性Ⅰ:四边形不等式: http://blog.csdn.net/jaihk662/article/details/78174717 决策单调性: 对于dp[i] = min(dp[i], dp ...
- 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大牛的博客里适 ...
最新文章
- Intel TBB简介及在Windows7 VS2013上源码的编译过程
- 【工具】Internet Download Manager( IDM )抓取站点
- 企业分布式微服务云SpringCloud SpringBoot mybatis (二)Spring Boot属性配置文件详解...
- latex 公式转图片
- 【CV论文阅读】:Rich feature hierarchies for accurate object detection and semantic segmentation...
- 开发文档模板_需求文档模板一堆什么样的适合你呢?
- 服务器ssr进程启动怎么运行,要SSR? NUXT项目从初始化到部署服务器流程全记录
- Redis的常用JavaAPI(Jedis)实现
- 【线程】——生产者消费者模型
- Eviews3种面板模型的选择-F检验操作详情
- 高中计算机评课,高中信息技术优质课评课范文
- 系统架构设计师考试心得与经验
- 明翰英语教学系列之名词篇
- 开学季适合学生党的蓝牙耳机,音质好的蓝牙耳机排行
- Flutter模拟器运行显示不正常问题(夜游神安卓模拟器)
- JDK15已发布!网友:我还在JDK8踏步走...
- html水平排列三个元素,且三者占宽度相同
- [宋史学习] 王全斌功过
- C Primer Plus编程题-第五章 运算符、表达式和语句
- 软件工程 结对编程1
热门文章
- python3moduleoftheweek中文_[翻译]Python Module of The Week: Counter
- python输入和输出的区别_python2和python3的输入和输出区别介绍
- mfc如何将一个数组中的字节数据用串口发送出去_RS232串口多机通信
- ipv6转换成ipv4_IPv6协议及其安全浅析
- finalshell日志乱码问题_Tomcat乱码问题
- limesurvey php5.2,limesurvey(配置心得)
- 查看与其他计算机是否连接网络,电脑的网络连接情况要如何的查看和管理
- php 初始化漏洞,这样做是不是不会引起PHP全局变量未初始化漏洞
- 鸿蒙2.0都来了,快搭个环境玩起来吧!
- VHDL简单微处理器的设计