传送门

解题思路

题目里有两句提示一定要看清楚,要不全买要不全卖,所以dp方程就比较好列,f[i]=max(f[j]*rate[j]*a[i])/(rate[j]*a[j]+b[j])+(f[j]*b[i])/(rate[j]*a[j]+b[j]),意义就是在从前面的某一天买入,这一天卖出,时间复杂度O(n^2),这样只有60分,,考虑优化。设在j这天a买入了x[j]股,则x[j]=(rate[j]*f[j])/(rate[j]*a[j]+b[j]),b买入了y[j]股,则y[j]=rate[j]/(rata[j]*a[j]+b[j]),那么转移方程就可以写成f[i]=x[j]*a[i]+y[j]*b[i],那么变形之后y[j]=x[j]*(a[i]/b[i])+f[i]/b[i],这不正是y=kx+b的形式,现在要求的就是用一个a[i]/b[i]斜率的直线去过x[j],y[j]这些点,使得截距最大,这正是斜率优化。但是发现这个东西只有f具有单调性,不能用单调数据结构维护,看了大佬们的博客发现可以用cdq维护。首先维护的一定是一个斜率递减的凸包,因为斜率一定为负。其次对于一条a[i]/b[i]来说,如果当前点与上一个点的斜率更小,那么向右移动可以使得截距更大,这样就可以用cdq来维护,首先按照k排序,然后cdq分治里x这一维,就可以很玄学的转移了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>using namespace std;
const int MAXN = 100005;
const double inf = 1e9;
const double eps = 1e-6;int n,stk[MAXN];
double f[MAXN];struct Query{int id;double x,y,k,a,b,rate;
}q[MAXN],tmp[MAXN];inline bool cmp(Query A,Query B){return A.k<B.k;
}inline double slope(int A,int B){if(q[A].x==q[B].x) return inf;return (q[A].y-q[B].y)/(q[A].x-q[B].x);
}void cdq(int l,int r){if(l==r){f[l]=max(f[l],f[l-1]);q[l].y=f[l]/(q[l].rate*q[l].a+q[l].b);q[l].x=q[l].y*q[l].rate;return;}int mid=l+r>>1;int t1=l-1,t2=mid,top=0;for(register int i=l;i<=r;i++) {if(q[i].id<=mid) tmp[++t1]=q[i];else tmp[++t2]=q[i];}for(register int i=l;i<=r;i++) q[i]=tmp[i];cdq(l,mid);for(register int i=l;i<=mid;i++){while(top>=2 && slope(stk[top-1],stk[top])<=slope(stk[top],i)+eps) top--;stk[++top]=i;}for(register int i=mid+1;i<=r;i++){while(top>=2 && slope(stk[top-1],stk[top])<=q[i].k+eps) top--;int j=stk[top];f[q[i].id]=max(f[q[i].id],q[j].x*q[i].a+q[j].y*q[i].b);}cdq(mid+1,r);int L=l,R=mid+1,o=0;while(L<=mid && R<=r){if(q[L].x<q[R].x+eps) tmp[++o]=q[L++];else tmp[++o]=q[R++];}while(L<=mid) tmp[++o]=q[L++];while(R<=r)  tmp[++o]=q[R++];for(register int i=l;i<=r;i++) q[i]=tmp[i-l+1];
}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+1+n,cmp);cdq(1,n);printf("%.3lf",f[n]);return 0;
}

View Code

转载于:https://www.cnblogs.com/sdfzsyq/p/9708797.html

LUOGU P4027 [NOI2007]货币兑换 (斜率优化+CDQ分治)相关推荐

  1. 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治

    [BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...

  2. 【bzoj 1492】【codevs 1797】 [NOI2007]货币兑换Cash (dp+cdq分治)

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 3803  Solved: 1604 [Submit][S ...

  3. bzoj 2149 拆迁队 斜率优化+cdq分治

    题面 题目传送门 解法 从来没写过这样的-- 第一问非常简单,能够从 j j j转移到 i i i的条件显然为 a [ i ] − a [ j ] ≥ i − j a[i]-a[j]≥i-j a[i] ...

  4. 斜率优化(CDQ分治,Splay平衡树):BZOJ 1492: [NOI2007]货币兑换Cash

    Description Input 第一行两个正整数N.S,分别表示小Y 能预知的天数以及初始时拥有的钱数. 接下来N 行,第K 行三个实数AK.BK.RateK,意义如题目中所述 Output 只有 ...

  5. P4027 [NOI2007] 货币兑换

    P4027 [NOI2007] 货币兑换 题目描述 小 Y 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A 纪念券(以下简称 A 券)和 B 纪念券(以下简称 B 券).每个持有金券的顾 ...

  6. bzoj1492 [NOI2007]货币兑换Cash (斜率DP+cdq分治)

    题意:到处都找得到. 我没看错的话当年考试的时候的题面里头,是提示了买卖一定是全部买入和卖出的.这样一来就好办了.cdq的论文里面那个F并不是她所说的那样,而是就是那个最优值.方程转移的时候实际上是枚 ...

  7. [BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 5907  Solved: 2377 [Submit][S ...

  8. YbtOJ#493-最大分数【斜率优化dp,分治】

    正题 题目链接:http://172.17.55.160/contest/117/problem/1 题目大意 nnn个数的一个序列,给其中的一些数打上标记. 一个标记方案的贡献为s1s_1s1​表示 ...

  9. 【BZOJ1492】【NOI2007】—Cash(cdq分治维护凸包优化斜率dp)

    传送门 考虑令f[i]f[i]f[i]为第iii天得到的最多的AAA券,g[i]g[i]g[i]为第iii天得到的最多的BBB券 则g[i]=f[i]/rate[i]g[i]=f[i]/rate[i] ...

  10. bzoj2149拆迁队 斜率优化dp+分治

    2149: 拆迁队 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 397  Solved: 177 [Submit][Status][Discuss ...

最新文章

  1. xp系统如何将计算机放到桌面快捷方式,如何整理xp系统电脑桌面快捷方式图标...
  2. 再见,Teamviewer!这款国产轻量级远程桌面软件超牛逼!
  3. 《分布式操作系统》知识点(8~14)二
  4. Android的服务(Service)(三)Service客户端的绑定与跨进程
  5. 4行代码解决:L1-057 PTA使我精神焕发 (5分)
  6. php数据库创建文件失败怎么回事,安装zblogPHP提示“创建c_option.php失败”解决方法...
  7. day10 Pyhton学习
  8. 启动盘Linux windows,Linux 中创建 USB 启动盘来拯救 Windows 用户
  9. 2021年95后医美人群洞察报告
  10. 35岁的互联网人出路在哪?
  11. PHP 实现获取服务器端IP地址
  12. 运行mvc项目报错 %@ Application Codebehind=Global.asax.cs Inherits=NHAPPAPI.MvcApplication Language=C...
  13. Leetcode每日一题:164.maximum-gap(最大间距)
  14. sh linux 一组命令,linux中的组命令和子shell
  15. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法
  16. H264之sps解析分辨率
  17. Java之常用函数笔记
  18. Android酷炫有用的开源框架
  19. 会员分享几个平时看榜单常去的网站
  20. 威纶触摸屏485轮询通讯_【威纶】触摸屏 界面制作软件 EBpro使用手册.pdf

热门文章

  1. 【转载】 扫描二维码自动识别手机APP下载地址
  2. SQL Server内部的内存管理
  3. Hadoop常见问题及解决方法
  4. Spring.NET学习笔记16——事务管理(应用篇) Level 200
  5. 下载MSN2009享受SkyDrive免费25G网络硬盘
  6. 【论文阅读】Deep Residual Learning for Image Recognition
  7. ACL'22 | 基于强化学习的实体对齐
  8. bert之我见 - positional encoding
  9. BiLSTM+CRF命名实体识别:达观杯败走记(下篇)
  10. 【NLP】NLP中各种各样的编码器