1492: [NOI2007]货币兑换Cash|动态规划|cdq分治
来源:互联网 发布:vr软件app 编辑:程序博客网 时间:2024/04/28 05:37
好厉害的分治贴代码
可以参考论文
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<set>#include<map>#include<vector>#include<algorithm>#include<iostream>#define T 120000#define eps 1e-9#define inf 1e9using namespace std;struct W{double x,y,k,a,b,rate;int id;}p[T],q[T],t[T];double f[T];int st[T];int n;bool cmp(W a,W b){return a.k<b.k;}double getk(int i,int j){ if (i==0) return -inf; if (j==0) return inf; if (fabs(p[i].x-p[j].x)<=eps) return -inf; return (p[i].y-p[j].y)/(p[i].x-p[j].x);}void solve(int l,int r){if(l==r){f[l]=max(f[l],f[l-1]);p[l].y=f[l]/(q[l].a*q[l].rate+q[l].b);p[l].x=p[l].y*q[l].rate;return ;}int mid=l+r>>1,l1=l,l2=mid+1;for(int i=l;i<=r;i++) if(q[i].id<=mid) t[l1++]=q[i]; else t[l2++]=q[i];for(int i=l;i<=r;i++) q[i]=t[i];solve(l,mid);int top=0;for(int i=l;i<=mid;i++){while(top>=2&&getk(i,st[top])>getk(st[top],st[top-1])) top--;st[++top]=i;}int j=1; for (int i=r;i>=mid+1;i--) { while (j<top&&q[i].k<getk(st[j],st[j+1])) j++; f[q[i].id]=max(f[q[i].id],p[st[j]].x*q[i].a+p[st[j]].y*q[i].b); } solve(mid+1,r);l1=l,l2=mid+1; for (int i=l;i<=r;i++) if ((p[l1].x<p[l2].x||l2>r)&&l1<=mid) t[i]=p[l1++]; else t[i]=p[l2++]; for (int i=l;i<=r;i++) p[i]=t[i];}int main(){scanf("%d%lf",&n,&f[0]);for(int i=1;i<=n;i++){scanf("%lf%lf%lf",&q[i].a,&q[i].b,&q[i].rate);q[i].k=-q[i].a/q[i].b;q[i].id=i;}sort(q+1,q+n+1,cmp);solve(1,n);printf("%.3lf\n",f[n]);return 0;}
0 0
- 1492: [NOI2007]货币兑换Cash|动态规划|cdq分治
- 【cdq分治】[Noi2007] bzoj1492 货币兑换Cash
- BZOJ-1492-货币兑换cash-NOI2007-CDQ分治
- bzoj 1492: [NOI2007]货币兑换Cash (dp+cdq分治)
- 【BZOJ 1492】[NOI2007]货币兑换Cash cdq分治+斜率dp
- bzoj 1492: [NOI2007]货币兑换Cash cdq分治
- [DP 斜率优化 CDQ分治||动态维护凸包] BZOJ 1492 [NOI2007]货币兑换Cash
- 【BZOJ】【P1492】【NOI2007】【货币兑换Cash】【题解】【cdq分治】
- [BZOJ1492][NOI2007]货币兑换Cash && CDQ分治+斜率优化
- bzoj [NOI2007]货币兑换Cash (cdq分治+斜率优化 )
- bzoj1492 [NOI2007]货币兑换Cash (斜率DP+cdq分治)
- BZOJ_P1492 [NOI2007]货币兑换Cash(CDQ分治+斜率优化)
- NOI2007货币兑换CASH 斜率DP CDQ分治
- [BZOJ1492][NOI2007][CDQ分治][斜率优化][DP]货币兑换Cash
- [BZOJ1492][NOI2007]货币兑换Cash-斜率优化DP-CDQ分治
- bzoj1492 [NOI2007]货币兑换Cash(斜率优化+CDQ分治)
- [bzoj1492][cdq分治][斜率优化][NOI2007]货币兑换Cash
- BZOJ1492: [NOI2007]货币兑换Cash 【dp + CDQ分治】
- [Magento SQL] 获取订单 总金额,总Qty,并排除 指定客户Email的订单
- ORACLE中赋予一个用户查询另一个用户所有表的权限
- IFeatureDataConverter2之三——导出指定字段的Shape
- Node.js_Get和Post
- Unity3D Texture to Sprite
- 1492: [NOI2007]货币兑换Cash|动态规划|cdq分治
- 矩阵连乘最优解
- union和union all的区别
- 使用Python发送http post请求上传文件
- postman中 form-data、x-www-form-urlencoded、raw、binary的区别
- Java汉字转拼音pinyin4j用法 .
- extjs中treepanel例子
- 继承ImageView的工具类,类似于QQ的圆形头像
- CodeForces 368A