Description

Link.

一共 \(n\) 天,每天可以卖出或者买入两种股票 \(A\) 和 \(B\)。这两种股票在第 \(i\) 天的价值为 \(A_i\) 和 \(B_i\)。

每天可以花所有的现金买入股票,这些股票中 \(A\) 股与 \(B\) 股的数量比为 \(rate_i\)。每天也可以把所有的股票以当天的价值卖出,获得现金。已知接下来 \(n\) 天的 \(A_i,B_i,rate_i\),求出 \(n\) 天后能够获得的最大价值。

Solution

设 \(f(i)\) 为第 \(i\) 天的最大钱数,\(g_{1}(i)\) 为 A 券的第 \(i\) 天能换的数量,\(g_{2}(i)\) 则为 B 券。

转移可以解方程得:

\[f(i)=\max\{f(i-1),a(i)g_{1}(j),b(i)g_{2}(j)\},j\in[1,i) \\
g_{1}(i)\frac{f(i)rate(i)}{a(i)rate(i)+b(i)} \\
g_{2}(i)=\frac{f(i)}{rate(i)\times a(i)+b(i)} \\
\]

两个 \(g\) 都没啥问题,主要来看 \(f(i)\)。提一下可得:

\[f(i)=\max\{b(i)\max_{j=1}^{i-1}\{\frac{a(i)}{b(i)}g_{1}(j)+g_{2}(j)\},f(i-1)\}
\]

斜率优化的形式,但斜率并无单调性。那个 \(f(i-1)\) 可以最后来线性做,所以可以先不管。然后就是 li-chao tree 的板子。

#include<bits/stdc++.h>
std::vector<double> pri;
int n,nodes[400010];
double g[5][100010],f[100010],a[100010],b[100010],rate[100010],slp[100010];
double _f(int i,int j){return pri[i-1]*g[1][j]+g[2][j];}
void ins(int l,int r,int x,int i)
{
if(l^r)
{
int mid=(l+r)>>1;
if(_f(mid,i)>_f(mid,nodes[x])) std::swap(nodes[x],i);
if(_f(l,i)>_f(l,nodes[x])) ins(l,mid,x<<1,i);
else ins(mid+1,r,x<<1|1,i);
}
else if(_f(l,i)>_f(l,nodes[x])) nodes[x]=i;
}
double find(int l,int r,int x,int i)
{
if(l^r)
{
int mid=(l+r)>>1;
if(mid>=i) return std::max(find(l,mid,x<<1,i),_f(i,nodes[x]));
else return std::max(find(mid+1,r,x<<1|1,i),_f(i,nodes[x]));
}
else return _f(i,nodes[x]);
}
#define All(x) (x).begin(),(x).end()
int main()
{
double pref=0,nowf=0;
scanf("%d %lf",&n,&nowf);
pref=nowf;
for(int i=1;i<=n;++i)
{
scanf("%lf %lf %lf",&a[i],&b[i],&rate[i]);
slp[i]=a[i]/b[i];
pri.emplace_back(slp[i]);
}
std::sort(All(pri));
for(int i=1;i<=n;++i)
{
nowf=std::max(pref,b[i]*find(1,n,1,std::lower_bound(All(pri),slp[i])-pri.begin()+1));
g[1][i]=nowf*rate[i]/(a[i]*rate[i]+b[i]);
g[2][i]=nowf/(a[i]*rate[i]+b[i]);
ins(1,n,1,i);
pref=nowf;
}
printf("%.3f\n",nowf);
return 0;
}

Solution -「NOI 2007」货币兑换的更多相关文章

  1. Solution -「NOI 2021」「洛谷 P7740」机器人游戏

    \(\mathcal{Description}\)   Link.   自己去读题面叭~ \(\mathcal{Solution}\)   首先,参悟[样例解释 #2].一种暴力的思路即为钦定集合 \ ...

  2. Solution -「NOI 2020」「洛谷 P6776」超现实树

    \(\mathcal{Description}\)   Link.   对于非空二叉树 \(T\),定义 \(\operatorname{grow}(T)\) 为所有能通过若干次"替换 \( ...

  3. Solution -「NOI 2016」「洛谷 P1587」循环之美

    \(\mathcal{Description}\)   Link.   给定 \(n,m,k\),求 \(x\in [1,n]\cap\mathbb N,y\in [1,m]\cap \mathbb ...

  4. Solution -「NOI 2012」「洛谷 P2050」美食节

    \(\mathcal{Description}\)   Link.   美食节提供 \(n\) 种菜品,第 \(i\) 种的需求量是 \(p_i\),菜品由 \(m\) 个厨师负责制作,第 \(j\) ...

  5. Solution -「NOI 2008」「洛谷 P3980」志愿者招募

    \(\mathcal{Description}\)   Link.   一项持续 \(n\) 天的任务,第 \(i\) 天需要至少 \(a_i\) 人工作.还有 \(m\) 种雇佣方式,第 \(i\) ...

  6. Solution -「NOI 2018」「洛谷 P4768」归程

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的无向连通图,边形如 \((u,v,l,a)\).每次询问给出 \(u,p\),回答 ...

  7. Solution -「HNOI 2007」「洛谷 P3185」分裂游戏

    \(\mathcal{Description}\)   Link.   给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i ...

  8. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  9. Solution -「NOI 模拟赛」彩色挂饰

    \(\mathcal{Description}\)   给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,设图中最大点双的大小为 \(s\),则保证 \(s\le6\).你将要用 \(k\) ...

  10. Solution -「NOI 模拟赛」出题人

    \(\mathcal{Description}\)   给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...

随机推荐

  1. HashMap 以及多线程基本感念

    接口 Map :映射项,(键值对 ) 的容器注意: 键 是唯一的 值 是可以重复的实现类 HashMap :哈希表结构 允许使用null值 和 null 键 线程不安全 键唯一 无序 linkedHa ...

  2. 哈希工具john

    john:一种极其强大且适应性强的哈希破解工具 爆破字典使用臭名昭著的 rockyou.txt 词表--这是一个非常大的常用密码词表 使用的工具 字典:rockyou.txt 哈希识别工具:hash- ...

  3. Python Selenium UI自动化测试

    Python Selenium UI自动化测试 1.自动化测试基础 1.1 自动化测试的定义 将人为的测试行为转化为机器自动执行的过程 1.2 自动化测试的目的 减少成本,提高测试效率 减少人为因素对 ...

  4. 深入理解Go语言接口

    1. 引言 接口是一种定义了软件组件之间交互规范的重要概念,其促进了代码的解耦.模块化和可扩展性,提供了多态性和抽象的能力,简化了依赖管理和替换,方便进行单元测试和集成测试.这些特性使得接口成为构建可 ...

  5. tSNE算法在自然语言处理中的应用:文本降维和可视化

    目录 技术原理及概念 t-SNE(Toeplitz-Stochastic Neural Network)是一种常用的文本降维和可视化算法,它的核心思想是将高维文本数据映射到低维空间,同时保持数据的一致 ...

  6. 图书搜索领域重大突破!用Apache SeaTunnel、Milvus和OpenAI提高书名相似度搜索精准度和效率

    作者 | 刘广东,Apache SeaTunnel Committer 背景 目前,现有的图书搜索解决方案(例如公共图书馆使用的解决方案)十分依赖于关键词匹配,而不是对书名实际内容的语义理解.因此会导 ...

  7. 温故知新,signalR、RSA加密、ConcurrentQueue队列

    这是一个用户密码异步加解密的Demo,包含了RSA非对称加密,ConcurrentQueue线程安全队列使用,signalR实时推送加解密信息等内容. 说在前面的话 距离上次更新已然快过去一年了,这中 ...

  8. 如何让一句话木马绕过waf ?

    一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...

  9. Day05_Java_作业

    A:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果. 1.看程序写结果 class Demo { public static void main(String[] args) { i ...

  10. 个人博客迁移到托管平台Netlify

    Netlify是一家国外的静态网站的托管平台,提供免费的https,自动化部署和升级,可以监控GitHub.GitLab或者Bitbucket做到自动更新发布. 个人体会访问速度不是很理想,不如部署在 ...