题目描述

题解:

我们可以考虑这样一种情况,有一块$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]土地购买相关推荐

  1. bzoj1597[Usaco2008 Mar]土地购买

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

  2. BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)

    题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...

  3. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

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

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

  5. 决策单调性Ⅱ:斜率优化(1597: [Usaco2008 Mar]土地购买)

    决策单调性Ⅰ:四边形不等式: http://blog.csdn.net/jaihk662/article/details/78174717 决策单调性: 对于dp[i] = min(dp[i], dp ...

  6. bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...

  7. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...

  8. bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】

    按xy降序排序,把能被完全包含的去掉 然后就得到了x升序y降序的一个数组 然后方程就显然了:f[i]=min(f[j]+y[j+1]x[i]) 斜率优化转移 说起来我还不会斜率优化呢是不是该学一下了 ...

  9. BZOJ 1597 [Usaco2008 Mar] 土地购买

    题意:中文题意,自行理解: 思路:这个题和hdu 1300 的题很像,算是一种类似于二维的扩展,题目不是很难,但窝发现网上的一些题解有些地方说的不是很清楚,在计算斜率优化式的时候,tzw大牛的博客里适 ...

最新文章

  1. win7 64位安装mysql教程视频_64位Win7系统安装Mysql 5.7.22图文教程
  2. 张亚勤、韦乐平等综述论文:通信人工智能的下一个十年
  3. IBatis.Net学习笔记系列文章
  4. TensorFlow 笔记5--模型复用
  5. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
  6. 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表
  7. Django支付宝自动转账功能(一)
  8. java 处理unicode_java处理unicode字符
  9. LeetCode—1.快速排序算法
  10. 开心记账本 投资理财两不误
  11. 使用VC做一个简单的UI界面对话框
  12. Linux 部分(tcp\ip)系统内核优化
  13. Excel学习日记:L9-图表制作-柱状图
  14. Python实现CRAPS赌博游戏
  15. 16. Segmentation
  16. word有符号时 对齐_对齐Excel货币符号时遇到问题
  17. C语言好学吗?C语言适合什么样的人群?
  18. 红米6A刷LineageOS17.1
  19. 登录计算机系统用英语怎么说,登录英语怎么说
  20. LeetCode(力扣)_接雨水

热门文章

  1. asp.net上传到服务器 步骤:
  2. 【恋上数据结构】布隆过滤器(Bloom Filter)原理及实现
  3. Linux系统管理(7)——Linux单用户模式详解 及应用场景
  4. 管理员运行bat文件获取当前目录和上级目录
  5. 走进我的交易室02_交易什么市场
  6. 阿里取消周报!但普通数据人的周报、月报焦虑,谁来拯救?
  7. 报表引擎API开发入门—简单程序数据集
  8. 使用ZipCodeValidatorDomainType验证不同国家的邮编
  9. centos window系统安装django
  10. c语言枚举常量,浅述C语言中枚举enum的用法