【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)
2016-09-19 20:11
399 查看
1597: [Usaco2008 Mar]土地购买
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3601 Solved: 1322
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
4100 1
15 15
20 5
1 100
输入解释:
共有4块土地.
Sample Output
500HINT
FJ分3组买这些土地: 第一组:100x1, 第二组1x100, 第三组20x5 和 15x15 plot. 每组的价格分别为100,100,300, 总共500.【分析】
因为要买所有土地,所以如果一个矩形完全被另一个矩形包含,那么可以不考虑小的那个矩形。
去掉他们只有按照长x升序排序,可以发现宽y都是降序的(不然会被去掉),所以容易知道我们每次取的一组都是连续的一段。
设答案为f[i]
则f[i]=x[i]*y[j+1]+f[j] 得到斜率优化标准式子,维护一个左下凸包。
代码如下:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<cmath> using namespace std; #define Maxn 50010 #define LL long long struct hp { LL x,y; }a[Maxn]; bool cmp(hp x,hp y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);} struct node { LL x,y; }t[Maxn]; LL f[Maxn]; bool check(int x,int y,int k) { LL kk=k; return kk*(t[x].x-t[y].x)<=t[x].y-t[y].y; } bool check2(int x,int y,int z) { return (t[y].x-t[z].x)*(t[x].y-t[y].y)<=(t[x].x-t[y].x)*(t[y].y-t[z].y); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+1+n,cmp); int cnt=0; for(int i=1;i<=n;i++) { while(cnt>0&&a[i].y>=a[cnt].y) cnt--; a[++cnt]=a[i]; } int len=0,st; t[++len].x=a[1].y;t[len].y=0;st=1; for(int i=1;i<=cnt;i++) { while(st<len&&check(st,st+1,-a[i].x)) st++; f[i]=a[i].x*t[st].x+t[st].y; t[0].x=a[i+1].y;t[0].y=f[i]; while(st<len&&check2(len-1,len,0)) len--; t[++len]=t[0]; } printf("%lld\n",f[cnt]); return 0; }
[BZOJ 1597]
2016-09-19 20:15:26
相关文章推荐
- 【BZOJ1597】【Usaco2008 Mar】土地购买 斜率优化DP
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化)
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
- [BZOJ 1597][Usaco2008 Mar]土地购买:DP斜率优化
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
- BZOJ 1597:[Usaco2008 Mar]土地购买(斜率优化)
- 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化
- BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- 斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
- 斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- BZOJ 1597 [Usaco2008 Mar]土地购买 动态规划+斜率优化
- bzoj1597: [Usaco2008 Mar]土地购买(斜率优化+Dp+单调队列)
- [BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
- [斜率DP优化]BZOJ 1597: [Usaco2008 Mar]土地购买 题解
- bzoj1597 [Usaco2008 Mar]土地购买(变形+斜率优化)
- [bzoj1597]: [Usaco2008 Mar]土地购买(斜率优化dp)
- 【斜率优化DP】BZOJ1597 [Usaco2008 Mar]土地购买