BZOJ3963 WF2011 Machine Works
来源:互联网 发布:数组 get 编辑:程序博客网 时间:2024/05/30 23:29
此题有一些坑点 , 如果你WAWA不止 , 可以直接看代码后的注意事项
提示:
1. 做过NOI货币兑换那题么? 没做过可以先做做那题 , BZOJ1492
2. 其实真正有意义的天数并不多 , 因为不是每天都可以买入卖出。
代码后详细解释:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <string>#include <vector>#include <deque>#include <stack>#include <queue>#include <set>#include <map>#include <algorithm>#include <cassert>using namespace std;typedef long long ll;const double eps = 1e-10;const int maxn = 1e5+1e2;int dcmp(double a) { return fabs(a)<eps?0:a<0?-1:1; } struct state{ ll d , p , r , g; void read() { scanf("%lld%lld%lld%lld" , &d , &p , &r , &g); } bool operator <(const state& b) const { return d<b.d; } void out(){ cout<<d<<" "<<p<<" "<<r<<" "<<g<<endl; } };struct points{ ll x , y; points(ll x=0 , ll y=0):x(x),y(y){} bool operator <(const points& b)const { return x<b.x || (x==b.x && y<b.y); }}p[maxn] , ch[maxn];typedef points Vector;Vector operator -(Vector a , Vector b) { return Vector(a.x-b.x , a.y-b.y); }double Cross(Vector a , Vector b) { return 1.0*a.x*b.y-1.0*a.y*b.x; } ll n , D , m , t;ll f[maxn];state d[maxn];ll offer(int i , points p) { return p.y+p.x*d[i].d; }void solve(int l , int r){ if(l==r) { f[l] = max(f[l-1] , f[l]); return ; } int mid = (l+r)/2; solve(l, mid); m = t = 0; for(int i=l;i<=mid;i++) if(f[i] >= d[i].p) p[++m] = points(d[i].g , f[i]-d[i].p+d[i].r-(d[i].d+1)*d[i].g); sort(p+1, p+1+m); for(int i=1;i<=m;i++) { while(t>1 && dcmp(Cross(ch[t]-ch[t-1], p[i]-ch[t-1]))>=0) t--; ch[++t] = p[i]; } for(int i=mid+1 , j = 1;i<=r;i++) { while(j<t && offer(i, ch[j+1])>=offer(i, ch[j])) j++; if(j<=t) f[i] = max(f[i] , offer(i, ch[j])); } solve(mid+1, r);}int main(int argc, char *argv[]) { int Case=0; while(cin>>n>>f[0]>>D && n+f[0]+D) { for(int i=1;i<=n;i++) d[i].read(); for(int i=1;i<=n+1;i++) f[i] = 0 ; d[++n].d = D+1; sort(d+1, d+1+n); solve(1, n); printf("Case %d: %lld\n" , ++Case , f[n]); } return 0;}
CDQ分治之。
先对时间离散化 , 因为时间相同的项目不会互相影响 , 所以大胆分治。
由于 货币兑换 已经家喻户晓所以 , 这里就不过多讲做法了。
注意事项:
- 凸包里可能一个点都没有 , 所以并不是每次都能更新
- 此题
longlong 会爆 , 所以要用double 写叉乘
0 0
- BZOJ3963 WF2011 Machine Works
- bzoj3963 [ WF2011 ] --cdq分治
- [BZOJ3963][WF2011][CDQ分治][斜率优化][DP]MachineWorks
- 【BZOJ3963】【ACM-WF2011】MachineWorks(CDQ分治+斜率优化)
- [BZOJ3963][WF2011]MachineWorks(斜率优化dp+cdq分治)
- bzoj3963
- hdu 3842 Machine Works
- [HDU3842]Machine Works
- Machine Works UVALive
- Machine Works - HDU 3842 cdq分治
- HDU 3842 Machine Works cdq分治 斜率优化
- works
- 3963: [WF2011]MachineWorks
- BZOJ3958: [WF2011]Mummy Madness
- BZOJ 3958: [WF2011]Mummy Madness
- Machine
- Works Cited
- bzoj 3963: [WF2011]MachineWorks (DP+CDQ分治)
- Redis-benchmark的试用总结
- SpannableString中的LinkMovementMethod和ClickableSpan的实现安卓可点击有颜色文字使用
- 函数参数的传递问题(指针的指针)【想在函数中分配内存】(指针做参数,即可做输入参数也可做输出参数)
- Centos 6.7设置静态IP方法与eth1问题解决
- delphi 如何比较两个二维数组是否相等
- BZOJ3963 WF2011 Machine Works
- 计算机应用研究与信息管理的整合
- 如何实现自定义的数据结构?以线性表的实现为例分析
- <Error>: ImageIO: PNG invalid PNG file: iDOT doesn't point to valid IDAT chunk
- JAVA 多形性
- 新版本Xcode无法打包生成ipa的问题解决 Cannot generate iOS App archive in xcode
- JAVA数据类型
- 基础知识之:类,方法,构造函数,变量等的相关回顾
- Eclipse和Tomcat联合进行网络编程的环境搭建