首页 > 其他分享 >货币兑换

货币兑换

时间:2024-03-03 22:34:34浏览次数:23  
标签:AA frac BB 要么 Rate 兑换 货币 我们

首先这道题目,记得把题面看完,最后一句话是给了提示的。。。

肯定考虑DP嘛,但DP不太清楚怎么设置状态,而且不清楚一天到底交易多少次

我们先来解决第二个问题,由于这是一道可以被解决的题目,所以我们猜想交易的次数非常有限

根据题目最后的提示,某一天的开端,我们要么全部都是钱,要么全部都是股票

假设某一天的开端,我们全部都是钱,一共有\(IP\)这么多钱,那么我们可以选择不操作;如果选择操作,那么一定是全部买完。通过列方程不难得出,获得的股票\(B\)的数量是\(x_B=\frac{IP}{A_kRate_k+b_k}\),获得的股票\(A\)的数量是\(x_A=Rate_k\times x_B=\frac{Rate_kIP}{A_kRate_k+b_k}\)。如果我们选择再全部卖出,那么获得的钱为\(x_AA_k+x_BB_k=IP\),与最开始的钱是一样的。综上,我们要么不操作,要么只操作一次,把所有钱都换成股票

假设某一天的开端,我们全部都是股票,假设有两种股票分别有\(x_A\)和\(x_B\)这么多,我们可以选择不操作;如果操作,我们获得的钱是\(x_AA_k+x_BB_k\),如果再全部买回来,我们有\(x_B^{'}=\frac{x_AA_k+x_BB_k}{A_kRate_k+b_k}\),\(x_A=Rate_k\times x_B=\frac{Rate_k(x_AA_k+x_BB_k)}{A_kRate_k+b_k}\),发现跟做开始长得好像不一样,别慌,继续卖,我们发现又会获得相同的钱\(x_AA_k+x_BB_k\)。综上,我们要么不操作,要么操作一次全部卖出变成钱,要么操作两次变成比例不一样的股票

但发现到这里还是没有什么办法DP,我们只是把每一天的操作局限在了两次以内,这个时候我们就先设置\(f[i]\)表示第\(i\)天能够获得的最多的钱,然后考虑如何DP下去

我们考虑当达到第\(i\)天的开始的时候,我们一定是要么全是钱,要么全是股票

对于第一种情况,有\(f[i]=f[i-1]\)

对于第二种情况,我们考虑这些股票是在什么时候交易过来的,也就是说上一次把所有钱变成股票是什么时候。我们枚举这个时候,假设这个时候是第\(j\)天,那么有\(f[i]=x_jA_i+y_jB_i\),其中\(y_j=\frac{f[j]}{A_jRate_j+B_j},x_j=Rate_jy_j\)

出现了\(i\)和\(j\)的乘积,感觉是斜率优化,但是又跟一般的斜率优化,不太一样,因为有两项乘积,别怕,我们这个时候随便提出某一项跟\(i\)有关的常量(注意一定要提取跟\(i\)有关的,因为当\(i\)固定的时候,这是常量),有\(f[i]=B_i(x_j\frac{A_i}{B_i}+y_j)\),这个时候就是普通的斜率优化了,我们用李超线段树即可。但要注意这里的\(\frac{A_i}{B_i}\)是实数,我们需要先离散化

其实最开始那一大堆数学分析看起来并没有什么用,然而他可以帮助我们理解整个过程,而且蕴含的思想(一天不会交易很多次)在有些题目也是很重要的

标签:AA,frac,BB,要么,Rate,兑换,货币,我们
From: https://www.cnblogs.com/dingxingdi/p/18050898

相关文章

  • 1-1 硬币兑换
    本题是一个完全背包问题,需要对三重循环进行优化。容易想到用(i,j)表示从前i个硬币中选取总价值为j的方案中,使用硬币数目的集合。f(i,j)表示其最小值。则有f(i,j)=min(f(i-1,j-k*w[i])+k),其中k={0,1,...,j/w[i]},w[i]是第i个硬币的价值。于是本题在对i,j......
  • day50 动态规划part7 代码随想录算法训练营 322. 零钱兑换【什么时候+1】
    题目:322.零钱兑换我的感悟:看着文字版也能做出来了,哈哈哈!!理解难点:这题是最小值dp[j]=min(dp[j],dp[j-coins[i]+1)因为是数量要加一个1,有的加,有的不加,还没太搞清楚。 听课笔记: 代码示例:classSolution:defcoinChange(self,coins:List[int],amount:int......
  • day44 动态规划part6 代码随想录算法训练营 518. 零钱兑换 II
    题目:518.零钱兑换II我的感悟:递推公式,我没写错。是初始化写错了。这种求多少种的,要考虑1种,是空集合选1中。而那些考虑能背最大的价值,要从0初始化,0的含义值无价值。 理解难点:递推公式,是累加dp[j]+=dp[j-conins[i]]初始化的含义 dp[0]=1听课笔记: 代码示例:cl......
  • R语言宏观经济学:IS-LM曲线可视化货币市场均衡
    全文链接:http://tecdat.cn/?p=32249原文出处:拓端数据部落公众号凯恩斯相关理论主要是美国20世纪30年代的经济危机而提出的,主张政府干预经济,实行宏观调控。按照希克斯的观点,灵活偏好(L)和货币数量(M)决定着货币市场的均衡,而人们持有的货币数量既决定于利率(i),又决定于收入(y)的......
  • 代码随想录 day44 零钱兑换 II 组合总和 Ⅳ
    零钱兑换II这里组合类问题用上了dp[j]=dp[j-nums[i]]这个递推式由于说了硬币可以用无数次也就是这是个完全背包问题这里先遍历物品再遍历背包就是算了组合数反过来就是算排列数组合总和Ⅳ这题就是组合类问题的排列数模板题......
  • 在Go中使用接口:实用性与脆弱性的平衡货币的精度
    在Go中使用接口:实用性与脆弱性的平衡原创 TimLiu 爱发白日梦的后端 2024-02-0307:00 发表于广东 听全文爱发白日梦的后端专注Go语言领域的发展,学习成为更牛逼的架构师,日常分享Go语言、架构、软件工具的使用。168篇原创内容公众号点击上方“名......
  • 货币系统
    其实这道题目如果加上证明有蓝的观察样例的解释,我们可以猜测一个结论:最终的货币面值一定由最初的货币面值的子集构成,而且没有选择的货币面值是可以被选择的货币面值线性表示的所以我们马上就得到了一个DP算法,在考场上实在证不出来直接写就好了:1、将\(a\)数组从小到大排序2、最......
  • 518. 零钱兑换 II(中)
    目录题目法一、回溯法二、动态规划题目给你一个整数数组coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回0。假设每一种面额的硬币有无限个。题目数据保证结果符合32位带符......
  • 322. 零钱兑换(中)
    目录题目法一、动态规划法二、带备忘录的动态规划法三、dp数组的迭代解法题目给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种......
  • 生活记录:和大师姐及实验室师兄弟一起吃鸡公煲留念——集积分兑换“毛绒玩具小猪”
    在实验室时每每出去聚餐吃饭总是喜欢去附近的鸡公煲,那家也是有个积分兑换毛绒玩具的活动,虽然最后也没有攒够积分而那家店在疫情中也没有熬过去,不过当年吃鸡公煲时是一直惦记着这个玩偶的,虽然未能实现自己的小目标但是这个经历还是蛮值得纪念的。   可爱的毛绒玩具——“小粉猪”......