bzoj1597 [Usaco2008 Mar]土地购买
题目描述
题解:
我们可以考虑这样一种情况,有一块$10*10$的土地,还有一块$1*1$的土地。
当然将$1*1$的土地合到$10*10$的土地中了。
所以我们可以先按土地$x$值从大到小排序,然后从前向后扫一边,只将不会被完全覆盖的放到处理的集合里。
这样就可以$dp$了。
有$$dp[i]=min(dp[j-1]+x[j]*y[i])$$
然后$$dp[j-1]=y[i]*(-x[j])+dp[i]$$
我们就可以进行开心的斜率优化了。
代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 50050 #define ll long long inline ll rd() {ll f=1,c=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();}return f*c; } ll n,m; struct Pair {ll a,b; }p0[N],p[N]; bool cmp(Pair x,Pair y) {if(x.a!=y.a)return x.a>y.a;return x.b>y.b; } ll dp[N]; struct wsx {ll x,y;wsx(){}wsx(ll x,ll y):x(x),y(y){} }sta[N]; double slop(wsx a,wsx b) {return (double)(a.y-b.y)/(a.x-b.x); } int tl; int fd(ll k) {int l=1,r=tl-1,ans=tl;while(l<=r){int mid = (l+r)>>1;if((sta[mid+1].y-sta[mid].y)>k*(sta[mid+1].x-sta[mid].x)){ans = mid;r = mid-1;}else l = mid+1;}return ans; } int main() { // freopen("tt.in","r",stdin);n = rd();for(int i=1;i<=n;i++)p0[i].a=rd(),p0[i].b=rd();sort(p0+1,p0+1+n,cmp);ll max_b = -1;for(int i=1;i<=n;i++){if(p0[i].b>max_b){max_b = p0[i].b;p[++m] = p0[i];}}sta[++tl] = wsx(-p[1].a,0);for(int i=1;i<=m;i++){int now = fd(p[i].b);dp[i] = sta[now].y - sta[now].x*p[i].b;wsx tmp = wsx(-p[i+1].a,dp[i]);while(tl>=1&&slop(sta[tl],sta[tl-1])>=slop(sta[tl],tmp))tl--;sta[++tl]=tmp;}printf("%lld\n",dp[m]);return 0; }
转载于:https://www.cnblogs.com/LiGuanlin1124/p/10218133.html
bzoj1597 [Usaco2008 Mar]土地购买相关推荐
- bzoj1597[Usaco2008 Mar]土地购买
bzoj1597[Usaco2008 Mar]土地购买 题意: n块土地,现在要求把土地分成几份,每份费用为该份中土地长最大值和宽最大值成绩,要求最小费用.n≤5000 题解: 当一块土地长宽都比另一 ...
- BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)
题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...
- 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]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...
- BZOJ 1597 [Usaco2008 Mar] 土地购买
题意:中文题意,自行理解: 思路:这个题和hdu 1300 的题很像,算是一种类似于二维的扩展,题目不是很难,但窝发现网上的一些题解有些地方说的不是很清楚,在计算斜率优化式的时候,tzw大牛的博客里适 ...
最新文章
- win7 64位安装mysql教程视频_64位Win7系统安装Mysql 5.7.22图文教程
- 张亚勤、韦乐平等综述论文:通信人工智能的下一个十年
- IBatis.Net学习笔记系列文章
- TensorFlow 笔记5--模型复用
- 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
- 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表
- Django支付宝自动转账功能(一)
- java 处理unicode_java处理unicode字符
- LeetCode—1.快速排序算法
- 开心记账本 投资理财两不误
- 使用VC做一个简单的UI界面对话框
- Linux 部分(tcp\ip)系统内核优化
- Excel学习日记:L9-图表制作-柱状图
- Python实现CRAPS赌博游戏
- 16. Segmentation
- word有符号时 对齐_对齐Excel货币符号时遇到问题
- C语言好学吗?C语言适合什么样的人群?
- 红米6A刷LineageOS17.1
- 登录计算机系统用英语怎么说,登录英语怎么说
- LeetCode(力扣)_接雨水