Description

农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <
= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价
格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要
付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费.

Input

* 第1行: 一个数: N
* 第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽

Output

* 第一行: 最小的可行费用.

Sample Input

4
100 1
15 15
20 5
1 100
输入解释:
共有4块土地.

Sample Output

500
FJ分3组买这些土地:
第一组:100x1,
第二组1x100,
第三组20x5 和 15x15 plot.
每组的价格分别为100,100,300, 总共500.

Solution

若一个矩形可以被其他矩形覆盖,那么其实这个矩形是不需要考虑的。
按x第一关键字,y第二关键字从小到大排序,单调栈就可以搞了。
然后可以发现长为递增,宽为递减。
就很容易发现是斜率优化了……p[i]为自变量,q[j+1]为斜率
维护上凸,斜率优化

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define LL long long
#define N (50000+100)
using namespace std;
struct node
{
LL x,y;
}land[N];
bool cmp(node a,node b) { return a.x<b.x || a.x==b.x && a.y<b.y; } LL p[N],q[N],cnt;
LL Q[N*],head,tail;
LL f[N],n; LL K(LL j) { return q[j+]; }
LL B(LL j) { return f[j]; }
LL Y(LL i,LL j) { return K(j)*p[i]+B(j); } LL cover(LL x1,LL x2,LL x3)
{
LL w1=(B(x1)-B(x2))*(K(x3)-K(x1));
LL w2=(B(x1)-B(x3))*(K(x2)-K(x1));
return w1<=w2;
} int main()
{
scanf("%lld",&n);
for (LL i=;i<=n;++i)
scanf("%lld%lld",&land[i].x,&land[i].y);
sort(land+,land+n+,cmp);
for (LL i=;i<=n;++i)
{
while (cnt && land[i].y>=q[cnt]) cnt--;
p[++cnt]=land[i].x; q[cnt]=land[i].y;
}
LL head=,tail=;
for (LL i=;i<=cnt;++i)
{
while (head<tail && Y(i,Q[head])>=Y(i,Q[head+])) head++;
f[i]=Y(i,Q[head]);
while (head<tail && cover(i,Q[tail],Q[tail-])) tail--;
Q[++tail]=i;
}
printf("%lld",f[cnt]);
}

BZOJ1597:[USACO]土地购买(斜率优化DP)的更多相关文章

  1. bzoj1597/luogu2900 土地购买 (斜率优化dp)

    首先按x从小到大排序,那么可得: f[i]=min{f[j]+x[i]*maxy[j+1..i]} 然而这样是$O(n^2)$的而且无法做优化. 然后我们考虑:如果对于某一点,存在另一点的x和y都比它 ...

  2. 【BZOJ1597】【Usaco2008 Mar】土地购买 斜率优化DP

    题目: 题目在这里 思路与做法: 这题如果想要直接dp的话不太好处理. 不过, 我们发现如果\(a[i].x>=a[j].x\)且\(a[i].y>=a[j].y\) \((\)a是输入的 ...

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

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

  4. bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5524  Solved: 2074[Submit] ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. BZOJ 1597 土地购买(斜率优化DP)

    如果有一块土地的长和宽都小于另一块土地的长和宽,显然这块土地属于“赠送土地”. 我们可以排序一下将这些赠送土地全部忽略掉,一定不会影响到答案. 那么剩下的土地就是长递减,宽递增的.令dp[i]表示购买 ...

  7. bzoj1597 [Usaco2008 Mar]土地购买——斜率优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 就是斜率优化水题... 然而WA了十几遍,正负号处理真让人心累... 还是该负就负,别 ...

  8. [Bzoj1597][Usaco2008 Mar]土地购买(斜率优化)

    题目链接 因为题目说可以分组,并且是求最值,所以斜率优化应该是可以搞的,现在要想怎么排序使得相邻的数在一个组中最优. 我们按照宽$w$从小到大,高$h$从小到大排序.这时发现可以筛掉一些一定没有贡献的 ...

  9. BZOJ 1597: [Usaco2008 Mar]土地购买 斜率优化

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MB Description 农夫John准备扩大他的农场,他正在考虑N ...

随机推荐

  1. 【模板】埃拉托色尼筛法 && 欧拉筛法 && 积性函数

    埃拉托色尼筛法 朴素算法 1 vis[1]=1; 2 for (int i=2;i<=n;i++) 3 if (!vis[i]) 4 { 5 pri[++tot]=i; 6 for (int j ...

  2. 使用DOM创建xml文件

    使用DOM创建xml文件 创建xml的代码如下: public class CreateXML { public static void main(String[] args) { DocumentB ...

  3. GitHub fork的使用

    我的GitHub账号是lanshanxiao,fork的账号是king1ko1king,再此说明! fork的项目是:Class-for-Everyone-Java-Server- 作者源项目地址是: ...

  4. 客户端ajax请求为实现Token验证添加headers后导致正常请求变为options跨域请求解决方法

    客户端为了实现token认证,通过Jquery的ajaxSetup方法全局配置headers: 全局配置headers后会导致部分不需要token认证的请求变为options请求,导致跨域访问.报错信 ...

  5. LeetCode 527---Word Abbreviation

    527. Word Abbreviation Given an array of n distinct non-empty strings, you need to generate minimal ...

  6. 葡萄城报表介绍:B/S 报表软件

    B/S 报表软件定义 B/S(Browser/Server,浏览器/服务器模式)也称 B/S 结构,是 WEB 兴起后的一种网络结构模式.B/S 模式是由最开始的 C/S(Client/Server, ...

  7. 如何从 GitHub 上下载单个文件夹

    DownGit 好用记得回来点赞(建议***)

  8. maven与ide工具的整合

    maven与myeclipse的整合 1   点击window会出现 2>选择  preferences

  9. Android Authenticator使用(转)

    出处:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/ 这篇文章个人觉得讲的非常好,比官方文档还要清晰,将 ...

  10. 【 PostgreSQL】后台周期执行函数实例(shell+crontab)

    工作中常见函数后台周期执行的情况,Oracle有job实现,gp数据库可以通过shell+crontab实现.流程如下: gpadmin用户下创建函数sh脚本. 将sh挂在crontab任务上 ### ...