当前位置: 首页 > news >正文

【学会动态规划】买卖股票的最佳时机含手续费(16)

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

这道题也不难理解,主要有两个点需要注意,

首先是买了股票需要卖了才能再买(手里一次只能有一个股票)

买卖一次股票需要付一次手续费。

2. 算法原理

1. 状态表示

dp[ i ] 表示的是第 i 天结束之后,所能获得的最大利润,

实际上,这个也能细分成两种情况:

一种是第 i 天购买了股票,我们设为 f [ i ]

一种是第 i 天啥也不干,我们设为 g [ i ]

2. 状态转移方程

我们通过最近的一步来推导状态转移方程,总共需要分析两个:

如果第 i 天要进入买入股票的状态,那如果前一天已经买了,就什么都不用干,

如果第 i 天要进入买入股票的状态,如果前一天没买,那今天买就行,

所以 f [ i ] = max( f [ i - 1 ],g [ i - 1 ] - p [ i ] )

如果第 i 要进入卖出股票的状态,如果前一天没买,就啥都不用干,

如果第 i 要进入卖出股票的状态,如果前一天买了,那今天卖掉就行,

所以 g [ i ] = max( g [ i - 1 ],f [ i - 1 ] + p[ i ] - fee )

记得要减手续费 fee。

3. 初始化

f [ 0 ] = -p [ 0 ](就是买了当天的股票)g [ 0 ] = 0(啥都不干)

4. 填表顺序

从左往右,两个表同时填即可。

5. 返回值

g [ n - 1 ]

3. 代码编写

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();vector<int> f(n);auto g = f;f[0] = -prices[0];for(int i = 1; i < n; i++) {f[i] = max(f[i - 1], g[i - 1] - prices[i]);g[i] = max(g[i - 1], f[i - 1] + prices[i] - fee);}return g[n - 1];}
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

http://www.lryc.cn/news/112857.html

相关文章:

  • 网络原因导致git下载报错处理办法
  • APP后端选择什么服务器
  • 什么是反射机制,反射机制的应用场景
  • Visual Studio 2019 实用功能设置(背景颜色,代码字体及行号设置)
  • 简述Mysql索引
  • windows .gitignore 加入文件名后 依然可以从git status中看到文件问题
  • 召唤神龙打造自己的ChatGPT
  • 裝修公司同室內設計公司有咩分別?
  • android oaid
  • 利用XSS在线平台获取用户cookie
  • rsync 命令以及脚本使用
  • 【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差
  • WebDAV之π-Disk派盘+可达漫画
  • Spring中Bean的线程安全问题
  • Java spring boot 全解Camunda 7,从 0 到 1 构建工作流平台——第二节:Spring boot 简单集成
  • 手持式静电测试仪的运用原理
  • 【css问题】flex布局中,子标签宽度超出父标签宽度,导致布局出现问题
  • 【vue3】前端应用中使用WebSocket与服务器进行通信并管理连接状态。
  • 服务端高并发分布式结构演进之路
  • 微服务基础总结
  • 实现vscode上用gdb调试stm32
  • 第4章 变量、作用域与内存
  • Python爬虫遇到重定向问题解决办法汇总
  • R并行计算
  • STM32 低功耗-待机模式
  • 极海APM32F003F6P6烧写问题解决记录
  • 【大数据】Flink 详解(一):基础篇
  • ChatGPT 作为 Python 编程助手
  • 饿了么输入框限制只能输入数字,并且保留小数
  • kylin-Desktop gsettings 获取或设置系统配置