土地购买[Usaco2008 Mar]
题目传送门
1597: [Usaco2008 Mar]土地购买
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 5925 Solved: 2243
[Submit][Status][Discuss]
Description
Input
Output
* 第一行: 最小的可行费用.
Sample Input
100 1
15 15
20 5
1 100
输入解释:
共有4块土地.
Sample Output
FJ分3组买这些土地:
第一组:100x1,
第二组1x100,
第三组20x5 和 15x15 plot.
每组的价格分别为100,100,300, 总共500.
HINT
Source
Gold
首先我们看到每组选择的土地可以是不连续的,这给我们造成了不小的麻烦。
我们思考一下题意,可以发现若一个矩形的长和宽都不大于另一个矩形的长和宽,那么这个矩形就不用考虑了。
怎么删除这些无用矩形呢?
我们先按长为第一关键字,宽为第二关键字进行降序排序,然后就可以比较轻松地删去无用矩形。
而且我们可以发现最后得到的序列的长单调递减,宽单调递增。也就是说如果选其中两个矩形为一组,序列中位于这两个矩形中间的矩形都是可以免费加入改组的。所以每一组的区间就是连续的。
于是我们就可以用f[i]表示购买前i块土地的最小花费。转移方程为f[i] = min{f[j]+l[j+1]*r[i]}.
但这样转移复杂度是O(n^2)的,还是不满足数据要求。
所以我们考虑斜率优化。状态转移复杂度优化为O(n). (还没学习斜率优化的同学可以看一下大米饼的博客,强烈推荐。传送门)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define LL long long 6 #define RI register int 7 using namespace std; 8 const int INF = 0x7ffffff ; 9 const int N = 50000 + 10 ; 10 11 inline int read() { 12 int k = 0 , f = 1 ; char c = getchar() ; 13 for( ; !isdigit(c) ; c = getchar()) 14 if(c == '-') f = -1 ; 15 for( ; isdigit(c) ; c = getchar()) 16 k = k*10 + c-'0' ; 17 return k*f ; 18 } 19 struct data { 20 LL l, r ; 21 }gg[N], hh[N] ; 22 int n ; int q[N] ; LL f[N] ; 23 24 inline double X(int i) { return -hh[i+1].l ; } 25 inline double Y(int i) { return f[i] ; } 26 inline double Rate(int i,int j) { return (Y(j)-Y(i))/(X(j)-X(i)) ; } 27 28 inline bool cmp1(data s,data t) { return s.l == t.l ? s.r > t.r : s.l > t.l ; } 29 int main() { 30 n = read() ; 31 for(int i=1;i<=n;i++) gg[i].l = read(), gg[i].r = read() ; 32 sort(gg+1,gg+n+1,cmp1) ; int tt = 0 ; 33 for(int i=1;i<=n;) { 34 hh[++tt] = gg[i] ; int j=i+1 ; 35 while(gg[j].l <= gg[i].l && gg[j].r <= gg[i].r) j++ ; 36 i = j ; 37 } n = tt ; 38 int head = 1, tail = 1 ; q[1] = 0 ; 39 for(int i=1;i<=n;i++) { 40 while(head < tail && Rate(q[head],q[head+1]) < hh[i].r) head++ ; 41 int j = q[head] ; f[i] = f[j]+hh[j+1].l*hh[i].r ; 42 while(head < tail && Rate(q[tail-1],q[tail]) > Rate(q[tail],i)) tail-- ; 43 q[++tail] = i ; 44 } 45 printf("%lld",f[n]) ; 46 return 0 ; 47 }
转载于:https://www.cnblogs.com/zub23333/p/8818956.html
土地购买[Usaco2008 Mar]相关推荐
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- bzoj1597[Usaco2008 Mar]土地购买
bzoj1597[Usaco2008 Mar]土地购买 题意: n块土地,现在要求把土地分成几份,每份费用为该份中土地长最大值和宽最大值成绩,要求最小费用.n≤5000 题解: 当一块土地长宽都比另一 ...
- 【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 ...
- 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化
[597][Usaco2008 Mar]土地购买 [题目描述] 有N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000 ...
- 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 Time Limit: 5 Sec Memory Limit: 64 MB Submit: ...
- bzoj 1598: [Usaco2008 Mar]牛跑步 [k短路 A*] [学习笔记]
1598: [Usaco2008 Mar]牛跑步 题意:k短路 ~~貌似A*的题目除了x数码就是k短路~~ \[ f(x) = g(x) + h(x) \] \(g(x)\)为到达当前状态实际代价,\ ...
- bzoj 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 Time Limit: 5 Sec Memory Limit: 64 MB Submit: ...
- bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(BFS)
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1293 Solved ...
- bzoj 1617: [Usaco2008 Mar]River Crossing渡河问题(DP)
1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1077 Solved: ...
最新文章
- Android Json解析方法
- The NVIDIA driver on your system is too old
- C++ 中判断非空的错误指针
- mysql与java连接查询_【java】MySQL数据库之连接查询
- gcc 编译错误:undefined reference to 'sqrt'
- 《Objective-c》-(内存管理之三:@property的内存管理)
- DroidPlugin插件化开发
- 在DialogFragment中显示大图片
- mysql 5.7日志配置_mysql-5.7日志设置
- 《Linux Shell脚本攻略》读书笔记第三章 以文件之名
- 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,计算机职称考试题目(网络基础答案)...
- 如何制作互联网区块链PPT模板?
- Day10.事件下(学习日记10)
- 计算机辅助设计技术领域的应用,关于计算机辅助设计技术在规划设计中的应用...
- smart3D、acute3D、three3D等技术网页浏览3D模型注意事项
- win10麦克风说话没声音_电脑录屏,真的没那么麻烦
- 按键精灵设置界面居中显示
- 微信小程序——运行他人的项目、寻找appid
- SSH服务器拒绝了密码,请再输入一次(解决方法)
- 论文中遇到的arg是啥意思?
热门文章
- 一个开源知识管理系统,满足企业定制化需求
- 密西根州立大学计算机qs分数,密歇根州立大学商科排名怎么样?2021年密歇根州立大学QS商科硕士排名商业分析硕士专业排名第20...
- Qt QLabel的修改形状显示圆形
- 怎么设置台式计算机密码忘了,台式电脑忘记开机密码怎么办
- 苹果电脑忘记开机密码重设教程
- 三星堆的青铜机器人_身穿“燕尾服”的青铜大立人是谁?探秘三星堆,从这些自带神秘光环的宝藏开始...
- 运营老鸟眼中,“用户分层”真的超级简单!
- python批量发送邮件_EDM营销算法:python自动批量发邮件
- Appdata\Local Roaming LocalLow文件夹
- 无人机pid调节顺口溜