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

动态规划 —— dp 问题-买卖股票的最佳时机含手续费

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

题目链接:

714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/description/

 


2.  算法原理

状态表示:以某一个位置为结尾或者以某一个位置为起点

 

dp[i]表示:第i天结束之后,此时的最大利润 :两种情况:

 

                                1. f[i]表示:第i天结束之后,处于买入状态,此时的最大利润

  

                                2. g[i]表示:第i天结束之后,处于卖出状态,此时的最大利润

  

2. 状态转移方程

  

在第i-1天处于买入状态,看买入状态能不能到自己,看卖出状态能不能到买入状态,另一个状态也是如此,一共4种状态

   

买入状态到卖出状态到
买入状态什么都不干-prices[i](买股票)
卖出状态+prices[i](卖股票)-fee(手续费)什么都不干

1. f[i] = max(f[i-1],g[i-1]--prices[i])

  

2. g[i] = max(g[i-1],f[i-1]+prices[i]-fee)

  

3. 初始化 :把dp表填满不越界,让后面的填表可以顺利进行

  

f[0] = --prices[0]               g[0] = 0 

4. 填表顺序 

    

本题的填表顺序是:从左往右,两个表同时填

5. 返回值 :题目要求 + 状态表示    

    

因为是要最大利润,所以买入状态不用考虑  

本题的返回值是:g[n-1]

 


3. 代码 

动态规划的固定四步骤:1.  创建一个dp表

                                        2. 在填表之前初始化

                                        3. 填表(填表方法:状态转移方程)

                                        4. 确定返回值

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int n = prices.size();
    //1.  创建dp表
        vector<int>f(n);
        auto g=f;

    //2. 在填表之前初始化
        f[0]=-prices[0];

    //3. 填表(填表方法:状态转移方程)
    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);
    }

    //4. 确定返回值
    return g[n-1];

    }
};


未完待续~ 


http://www.kler.cn/a/387534.html

相关文章:

  • LLMs之MindFormers:基于国产硬件华为Atlas针对GLM-4-9B实现模型全参微调(单机8卡)→模型推理(单卡多batch推理)
  • 《基于深度学习的车辆行驶三维环境双目感知方法研究》
  • 一文了解珈和科技在农业遥感领域的服务内容和能力
  • 【ubuntu】单进程申请4GB内存
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • 【Java学习】电脑基础操作和编程环境配置
  • linux opp 模块
  • 深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解
  • JavaEE初阶---properties类+反射+注解
  • EasyUI弹出框行编辑,通过下拉框实现内容联动
  • go生成4位随机数字
  • 深入了解决策树:机器学习中的经典算法
  • 如何使用HighBuilder前端开发神器
  • ThingsBoard规则链节点:RPC Call Reply节点详解
  • Python的函数
  • 第一部分 Supervised Machine Learning: Regression and Classification
  • 嵌入式系统与机器学习的结合
  • oracle使用CTE递归分解字符串
  • python - leetcode【数据结构-算法】-入门/通关手册
  • Rust移动开发:Rust在iOS端集成使用介绍
  • 搭子小程序定制开发:全新找搭子之旅
  • 计算机网络之物理层
  • Rust:启动与关闭线程
  • Java 中的 Supplier:让数据生成更灵活
  • 设计模式学习总结(一)
  • 【VScode】Html+Css+JavaScript学习计划表