使用动态规划,按已完成的交易次数记录手中的现金。
定义两个状态:
初始只有 f[0]=C,其他状态不可达。相同交易次数和持仓情况下,现金越多越好,因此只保留最大值。
一家投资企业准备调整黄金买卖方案,以尽量增加最终利润。企业已经掌握一段时期的逐日报价,可以选择某日购入黄金,并在之后的日期将其出售,通过价差赚取收益。该时期内允许反复买卖,不过每轮交易都有手续费,起始本金也有上限。另外,每次购入的黄金数量相同,完整交易的总轮数不得突破规定额度。
任务:
根据每日报价、起始本金、每轮手续费以及可用交易额度,求出能够实现的最高净利润。
注意:
输出一个整数,表示最优方案的净利润,即最终空仓时的现金减去起始本金。若所有可行交易均不能带来正利润,则输出 0。
输入:
5
8 6 9 3 11
2
12
1
3
输出:
22
解释:
在第 4 天购入 3 单位黄金,需支付 3×3=9,本金 12 足够覆盖费用。
第 5 天全部售出,收到 11×3=33,再扣除手续费 2,这一轮净赚 33−9−2=22。
因此最高利润为 22。
整个方案仅完成 1 轮买卖,符合额度要求。
输入:
7
5 2 6 7 4 9 8
3
4
3
2
输出:
14
解释:
第 2 天购入 2 单位,支付 2×2=4,恰好用完本金。
第 4 天售出,扣费后得到 7×2−3=11,这一轮赚得 7,可用现金变为 11。
第 5 天再购入 2 单位,需付 4×2=8,此时已有现金足以支持。第 6 天清仓,该轮利润为 9×2−8−3=7。
两轮累计利润为 7+7=14。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册