首页 > 其他分享 >[NOI2007] 货币兑换

[NOI2007] 货币兑换

时间:2025-01-15 17:10:47浏览次数:1  
标签:num dfrac align NOI2007 jRate 兑换 货币 max gets

前言

想起之前一道叫股票的题, 也是这么长的题面, 不过事已至此, 先读题吧

最近这么菜一定要记住每日一练和 \(\rm{whk}\) 啊

思路

首先直觉是比例不好处理, 肯定是要转化的

发现最后写了一句

必然存在一种最优的买卖方案满足:
每次买进操作使用完所有的人民币, 每次卖出操作卖出所有的金券


有这个性质明显更好做, 每次可以钦定 \(OP = 100\) , 但是为什么呢, 考虑证明
你发现每次买入相当于对 \(num_A, num_B\) 的比例进行调整, 每次卖出相当于按照这个比例和 \(A_k, B_k\) 的比例赚钱
形式化的来讲, 买入相当于

\[rate = \frac{num_A}{num_B} \to \frac{num_A + \frac{Rate_k IP}{Rate_kA_k + B_k}}{num_B + \frac{IP}{Rate_kA_k + B_k}} \\ \ \\ num_B \gets num_B + \frac{IP}{Rate_kA_k + B_k} \]

卖出相当于

\[\begin{align*} profit & = (num_A A_k + num_B B_k) \times OP\% \\ & = num_B (A_K rate + B_k) \times OP \% \end{align*} \]

一次能赚钱, 显然是要把 \(A_k, B_k\) 全部甩出去赚的最多, 买入同理

你可以当我没有证明, 我自己也看不懂


考虑现在怎么做
你发现, 如果把 \(N\) 天分成 \(k\) 段由买入和卖出组成的时间区间 \([l, r]\) , (注意 \(l = r\) 是非法的; 同天内只考虑先卖再买, 不然没有意义) , 我们可以考虑 \(\rm{dp}\)

令 \(f_i\) 表示对于以 \(i\) 结尾的分段, 最优的利润 (也就是手上还有多少钱)
也就是说买 \(A, B\) 的数量为

\[x_i=\dfrac{f_iRate_i}{A_iRate_i+B_i} \\ \ \\ y_i=\dfrac{f_i}{A_iRate_i+B_i} \]

容易写出柿子

\[\begin{align*} f_i \gets \begin{cases} f_{i-1} \\ \max\limits_{j \in [0, i)} A_ix_j+B_iy_j \end{cases} \end{align*} \]

考虑第二个柿子怎么处理
你发现这种跟 \(i, j\) 都有关的东西, 拆一下转化成斜率优化的形式即可


首先化成同项, 否则就会像下面一样

\[\begin{align*} f_i \gets \begin{cases} f_{i-1} \\ \max\limits_{j \in [0, i)} \dfrac{(A_iRate_j + B_i)f_j}{A_jRate_j+B_j} \\ \end{cases} \\ \end{align*} \\ \Downarrow \\ f_i = \max\limits_{j \in [0, i)} \dfrac{(A_iRate_j + B_i)f_j}{A_jRate_j+B_j} \\ \begin{align*} f_i & = \dfrac{(A_iRate_j + B_i)f_j}{A_jRate_j+B_j} \\ f_i & = \dfrac{(A_iRate_j + B_i)f_j}{A_jRate_j+B_j} \\ \end{align*} \]

根本不对

也不能找 \(x_j, y_j\) 的关系

\[f_i \gets \max\limits_{j \in [0, i)} A_ix_j+B_iy_j \\ f_i \gets \max\limits_{j \in [0, i)} A_i y_j Rate_j + B_i y_j \\ f_i \gets \max\limits_{j \in [0, i)} y_j (A_i Rate_j + B_i) \\ \]


考虑

\[f_i \gets \max\limits_{j \in [0, i)} A_ix_j+B_iy_j \\ f_i \gets \max\limits_{j \in [0, i)} B_i (\frac{A_i}{B_i} x_j + y_j) \\ f_i \gets B_i\max\limits_{j \in [0, i)} (\frac{A_i}{B_i} x_j + y_j) \\ \]

继续转化, 记 \(\frac{A_i}{B_i} = v_i\)

\[\begin{align*} f_i & = (v_i x_j + y_j) \\ f_i & = v_i\dfrac{f_jRate_j}{A_jRate_j+B_j} + \dfrac{f_j}{A_jRate_j+B_j} \\ \end{align*}\]

可以令 \(x = v_i, y = f_i, k = \dfrac{f_jRate_j}{A_jRate_j+B_j} , b = \dfrac{f_j}{A_jRate_j+B_j}\) 李超线段树维护

发现 \(x\) 可能为小数, 怎么办
我们考虑把 \(x\) 离散化对应到整数上即可, 不影响答案

注意去重函数的精度问题

实现

这种经典题要写代码, 第一道李超线段树

总结

斜率优化类问题常见的区间划分, 一般来说, 买卖问题这种两点型问题, 时间区间划分很常见

注意讨论啥也不干的情况
注意斜率优化把 \(i, j\) 都有的柿子化成同项之后再处理, 一般的方法是提出一个只与 \(i\) 相关的因式
这题也是巧妙地转化, 人类智慧美丽时刻

遇到小数可以考虑离散化

标签:num,dfrac,align,NOI2007,jRate,兑换,货币,max,gets
From: https://www.cnblogs.com/YzaCsp/p/18673459

相关文章

  • [NOI2007] 货币兑换
    前言想起之前一道叫股票的题,也是这么长的题面,不过事已至此,先读题吧最近这么菜一定要记住每日一练和\(\rm{whk}\)啊思路首先直觉是比例不好处理,肯定是要转化的发现最后写了一句必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币,每次卖出操作卖出......
  • 【Docker】Docker搭建一款开源的加密货币量化交易平台
    项目介绍Freqtrade是一个开源的加密货币量化交易平台,它允许用户通过编写和配置交易策略来自动化交易过程。功能特点开源性:Freqtrade的代码是开源的,这意味着用户可以查看、修改和扩展平台的功能。自动化交易:通过配置交易策略,Freqtrade可以自动执行买卖操作,无需人工干预。多交......
  • 零钱兑换(动态规划)
    给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。 示例 1:输入:coins=[1,2,5],amount=11......
  • 代码随想录训练营第三十七天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼
    完全背包理论直接的说明就是把01背包的有限次选取变为无限次选取求最大价值相对的遍历方向也可以相互调换因为dp[j]只需要上次的计算结果就行 publicclassCarlcodeAllBag{publicstaticvoidtestCompletePack(){//先遍历物品再遍历背包int[]......
  • leetCode322.零钱兑换
    题目:给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例1:输入:coins=[1,2,5],amount=11输出:3解释:11=5+5+1思......
  • 基于广告观看的积分兑换系统实现与优化
    本文介绍了一种基于广告观看的积分兑换系统,其核心理念与用户通过观看广告内容获取积分,进而将积分兑换为现金的机制相似,类似于国内某知名短视频平台的广告收益模式。该系统旨在探索一种非传统收益获取途径,通过技术手段实现自动化、高效化的广告观看与积分累积过程。一、系统......
  • 美联储降息后,比特币惊险守住10万美元大关,加密货币市场整体下滑
    原文来源:美联储降息后,比特币惊险守住10万美元大关,加密货币市场整体下滑-币热网-区块链数字货币新闻消息资讯加密货币市场遭遇重挫,美联储降息引发连锁反应在本周四的交易中,加密货币市场经历了显著的下跌,跌幅高达7.5%。这一波动主要归因于美联储将联邦基金利率下调了25个......
  • [HNOI2007] 梦幻岛宝珠
    思路听\(\rm{ZCY}\)大佬讲的,有些困难,又去看了\(\rm{TJ}\)首先题目中有很明确的提示,即任意一个物品的价值可以表示为\(a\times2^b\)我们将物品按照\(b\)来分组,令\(f_{b,W}\)表示对于所有\(w_i=a\times2^b\)这样的物品,使用了\(W\)的背包容量我们注......
  • 货币枚举值
    CREATETYPEcurrencyASENUM('USD',--美元'EUR',--欧元'CNY',--人民币'JPY',--日元'GBP',--英镑'AUD',--澳大利亚元'CAD',--加拿大元'CHF',......
  • 用人工智能模型预测股市和加密货币的K线图
    前一篇:《从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅》前言:加密货币市场昨日大幅下跌,一天内市值蒸发逾70亿人民币。有人可能会问,如果使用人工智能模型预测市场的涨跌,是否能避免损失?作者在此指出,加密货币市场和股市具有高度的主观性,受人为因素、情绪波动和外界干预的显著......