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

[Algorihm][简单多状态DP问题][买卖股票的最佳时机含冷冻期][买卖股票的最佳时机含手续费]详细讲解

目录

  • 1.买卖股票的最佳时机含冷冻期
    • 1.题目链接
    • 买卖股票的最佳时机含冷冻期
    • 2.算法原理详解
    • 3.代码实现
  • 2.买卖股票的最佳时机含手续费
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.买卖股票的最佳时机含冷冻期

  • 1.题目链接

买卖股票的最佳时机含冷冻期

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i][j]的含义:i -> 到了哪天,j -> 当天处于什么状态

      • dp[i][0]:第i天结束之后,处于"买入"状态,此时的最大利润
      • dp[i][1]:第i天结束之后,处于"可交易"状态,此时的最大利润
      • dp[i][2]:第i天结束之后,处于"冷冻期"状态,此时的最大利润
    • 推导状态转移方程:本题关系复杂,可以画图辅助

      • dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - p[i])
      • dp[i][1] = max(dp[i - 1][1], dp[i - 1][2])
      • dp[i][2] = dp[i - 1][0] + p[i]
        请添加图片描述
    • 初始化:

      • dp[0][0] = -p[0], dp[0][1] = dp[0][2] = 0
    • 确定填表顺序:从左往右,一次填写三个表

    • 确定返回值:max(dp[n - 1][1], dp[n - 2][2])


3.代码实现

int maxProfit(vector<int>& prices) 
{int n = prices.size();vector<vector<int>> dp(n, vector<int>(3));dp[0][0] = -prices[0];for(int i = 1; i < n; i++){dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][2]);dp[i][2] = dp[i - 1][0] + prices[i];}return max(dp[n - 1][1], dp[n - 1][2]);
}

2.买卖股票的最佳时机含手续费

1.题目链接

  • 买卖股票的最佳时机含手续费

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i]的含义

      • i天结束之后,所能获得的最大利润
      • 本题,状态表示还可以继续细分:
        • f[i]:第i天结束之后,处于“买入”状态,此时的最大利润
        • g[i]:第i天结束之后,处于“卖出”状态,此时的最大利润
          请添加图片描述
    • 推导状态转移方程:本题关系复杂,可以画图辅助

      • f[i] = max(f[i - 1], g[i - 1] - p[i])
      • g[i] = max(g[i - 1], f[i - 1] + p[i] - fee)
        请添加图片描述
    • 初始化:

      • f[0] = -p[0], g[0] = 0
    • 确定填表顺序:从左往右,两个表一起填

    • 确定返回值:g[n - 1]


3.代码实现

int maxProfit(vector<int>& prices, int fee) 
{int n = prices.size();vector<int> f(n); // 买入vector<int> g(n); // 卖出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/354483.html

相关文章:

  • 微服务:利用RestTemplate实现远程调用
  • 【Linux】TCP的三次握手和四次挥手
  • 爬山算法全解析:掌握优化技巧,攀登技术高峰!
  • 使用 Ollama框架 下载和使用 Llama3 AI大模型的完整指南
  • 最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版
  • 中国改革报是什么级别的报刊?在哪些领域具有较高的影响力?
  • 乡村振兴的乡村公共服务提升:提升乡村公共服务水平,满足农民多样化需求,构建幸福美好的美丽乡村
  • 【在 Windows 上使用 ADB 安装 Android 设备上的 atx-agent】
  • iptables 防火墙
  • 软件设计师笔记1
  • springboot集成mybatis 单元测试
  • ecc dsa rsa des
  • Gitee的原理及应用详解(三)
  • Mia for Gmail for Mac:Mac用户的邮件管理首选
  • 如何在忘记密码的情况下解锁 iPhone? 6 种方法分享
  • 国产操作系统上使用rsync恢复用户数据 _ 统信 _ 麒麟 _ 中科方德
  • Elastic Cloud 将 Elasticsearch 向量数据库优化配置文件添加到 Microsoft Azure
  • Mongodb 可视化工具Robot 3t安装【windows环境下】
  • 【MATLAB】信号的熵
  • 【QT环境配置】节约msvc2017灰色不可用问题
  • MyBatis框架的使用:mybatis介绍+环境搭建+基础sql的使用+如何使用Map传入多个参数+返回多个实体用List或者Map接收+特殊sql的使用
  • linux centos nginx配置浏览器访问后端(tomcat日志)
  • 01-03.Vue:v-on的事件修饰符
  • MSI U盘重装系统
  • ubuntu如何安装gitlab runner
  • Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana
  • 如何判断自己的情商高低?
  • JAVA:Spring Boot整合MyBatis Plus持久层
  • 如何选择优质的气膜体育馆工程服务商—轻空间
  • Anti Desgin Vue 实现 表格可编辑、新增、删除功能