博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1597:[USACO]土地购买(斜率优化DP)
阅读量:6329 次
发布时间:2019-06-22

本文共 1236 字,大约阅读时间需要 4 分钟。

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

1 #include
2 #include
3 #include
4 #include
5 #define LL long long 6 #define N (50000+100) 7 using namespace std; 8 struct node 9 {10 LL x,y;11 }land[N];12 bool cmp(node a,node b) { return a.x
=q[cnt]) cnt--;38 p[++cnt]=land[i].x; q[cnt]=land[i].y;39 }40 LL head=1,tail=1;41 for (LL i=1;i<=cnt;++i)42 {43 while (head
=Y(i,Q[head+1])) head++;44 f[i]=Y(i,Q[head]);45 while (head

转载于:https://www.cnblogs.com/refun/p/8680915.html

你可能感兴趣的文章
tar 命令的详解
查看>>
Cisco路由器安全配置
查看>>
第十次作业
查看>>
spring事务管理(一)
查看>>
给定一个字符串s,返回去掉子串"mi"后的字符串。
查看>>
Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
查看>>
配置免密码登录Linux服务器
查看>>
Wrod中超链接的一些技巧
查看>>
我的友情链接
查看>>
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Python re
查看>>
Linux基础命令---gzip
查看>>
忠告15:山姆。摩尔。沃尔顿:追逐着,并坚持不懈
查看>>
openstack-mikata之网络服务(controller安装部署)
查看>>
我的友情链接
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
jsonView谷歌插件
查看>>