【笔记篇】斜率优化dp(五) USACO08MAR土地购(征)买(用)Land Acquisition
2018-01-26 11:25
218 查看
好好的题目连个名字都不统一..
看到这种最大最小的就先排个序嘛= =以x为第一关键字, y为第二关键字排序.
然后有一些xi<=xi+1,且yi<=yi+1的土地就完全可以在买i+1的时候顺便把i买了.
那么现在就剩下了x递增 y递减的一串. 可以证明一次一起买的应该是连续的一段, 因为中间的y一定比左端点的大, x一定比右端点的小, 那么一定可以在买左右端点的同时把中间的买走.
那就是常见套路了, 方程f[i]=f[j]+x[i]∗y[j+1]
然后这个出奇地好化… 都不用数项数怕漏项了…f[j]=−x[i]∗y[i+1]+f[i]…
但是吧, 我们按照这个式子找单调性的时候发现这个斜率总是与凸包的边符号相反, 就会出问题..比如找不到该转移的时候了… 反正我遇到这种情况一脸懵逼… 但是后来想想我tm可能是傻…其实就是←_←
我们把方程写成f[j]=x[i]∗(−y[i+1])+f[i]这样不就ok了么= =
然后就变成了一道大水题(然而你不还是去除无用土地的时候去错了么(喂 你不要说出来啊 很丢人的QAQ))此人又日常精分了←_←
代码(这次压过行了, 加了个struct和sort反而降到了18行)
但是这篇好短啊OvO 算了短就短吧~
真实原因: 还有不到15min放学 作为蒟蒻应该A不掉另一道题再把这篇blog搞成二合一于是就这么短放在这儿了. 其实更主要的原因是懒这种事情我怎么会告诉你萌呢~
看到这种最大最小的就先排个序嘛= =以x为第一关键字, y为第二关键字排序.
然后有一些xi<=xi+1,且yi<=yi+1的土地就完全可以在买i+1的时候顺便把i买了.
那么现在就剩下了x递增 y递减的一串. 可以证明一次一起买的应该是连续的一段, 因为中间的y一定比左端点的大, x一定比右端点的小, 那么一定可以在买左右端点的同时把中间的买走.
那就是常见套路了, 方程f[i]=f[j]+x[i]∗y[j+1]
然后这个出奇地好化… 都不用数项数怕漏项了…f[j]=−x[i]∗y[i+1]+f[i]…
但是吧, 我们按照这个式子找单调性的时候发现这个斜率总是与凸包的边符号相反, 就会出问题..比如找不到该转移的时候了… 反正我遇到这种情况一脸懵逼… 但是后来想想我tm可能是傻…其实就是←_←
我们把方程写成f[j]=x[i]∗(−y[i+1])+f[i]这样不就ok了么= =
然后就变成了一道大水题(然而你不还是去除无用土地的时候去错了么(喂 你不要说出来啊 很丢人的QAQ))此人又日常精分了←_←
代码(这次压过行了, 加了个struct和sort反而降到了18行)
#include <cstdio> #include <algorithm> const int N=5e4+5;typedef long long LL; struct lot{int x,y;}l ;LL f ; int q ,h,t,n,m; inline bool operator<(const lot&a,const lot&b){return (a.x==b.x)?a.y<b.y:a.x<b.x;} double slope(int x,int y){return 1.0*(f[x]-f[y])/(l[y+1].y-l[x+1].y);} inline int gn(int a=0,char c=0){for(;c<'0'||c>'9';c=getchar()); for(;c>47&&c<58;c=getchar())a=a*10+c-48;return a;} int main(){m=gn();for(int i=1;i<=m;++i) l[i].x=gn(),l[i].y=gn(); std::sort(l+1, l+m+1); for(int i=1;i<=m;++i){while(n>0&&l .y<=l[i].y) --n;l[++n]=l[i];} for(int i=1;i<=n;++i){ while(h<t&&slope(q[h],q[h+1])<=l[i].x) ++h; f[i]=f[q[h]]+1LL*l[i].x*l[q[h]+1].y; while(h<t&&slope(q[t],q[t-1])>=slope(q[t],i)) --t; q[++t]=i; } printf("%lld",f ); }
但是这篇好短啊OvO 算了短就短吧~
真实原因: 还有不到15min放学 作为蒟蒻应该A不掉另一道题再把这篇blog搞成二合一于是就这么短放在这儿了. 其实更主要的原因是懒这种事情我怎么会告诉你萌呢~
相关文章推荐
- 【BZOJ1597】【Tyvj2461】土地购买,第一次的斜率优化DP
- 【笔记篇】斜率优化dp(三) APIO特别行动队
- [bzoj1597][USACO2008]土地购买(DP斜率优化/四边形优化)
- [BZOJ1597]Usaco2008Mar 土地购买|斜率优化dp
- [bzoj1597]: [Usaco2008 Mar]土地购买(斜率优化dp)
- BZOJ1597土地购买——斜率优化DP (Ⅲ)
- CDQ分治与斜率优化DP——学习笔记
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
- BZOJ.1597.[Usaco2008 Mar]土地购买(DP 斜率优化)
- 1597: [Usaco2008 Mar]土地购买 斜率优化dp
- bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp
- bzoj 1597 土地购买(斜率优化dp)
- 斜率优化dp 学习笔记
- 【BZOJ1597】【USACO 2008 Mar】土地购买(斜率优化DP)
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
- [BZOJ 1597] Usaco2008 Mar 土地购买 · 斜率优化DP
- 【斜率优化dp】bzoj 1597 土地购买
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- 1597: [Usaco2008 Mar]土地购买 [ dp+斜率优化 ] 未完
- [bzoj] 1597 土地购买 || 斜率优化dp