首页 > 其他分享 >动态规划[买卖股票的最佳时机一系列]

动态规划[买卖股票的最佳时机一系列]

时间:2023-09-09 11:35:49浏览次数:51  
标签:买卖 股票 收益 最佳时机 max prices 动态 price dp

目的是最大化一个利润的值,前提:买必涨,只是考虑赚多少。

之前的cost是今天的price

收益一次 = 卖的价格减去买的价格 = price - cost 。if profit < 0 then 0,无滞后性,每次卖股票都是站在当前这天的角度,但是可以看到后面几天股票的价格,所以如果不见涨,则不会买。

总收益 = 很多次收益的累加和。这个次数限制可能是无数次(退化为贪心)。一次、两次、k次

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/solutions/2199035/yi-tao-mo-ban-ji-xing-dai-ma-bi-zhao-yan-0ap8/

 

121. 买卖股票的最佳时机

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

如果说dp[i]表示某一天,那么对于每个i,都应该会记录那天快结束时候的收益情况。

收益是累加了之前天的已经卖出的股票获得的收益,至于当前手上有没有股票,就得分情况

dp[i][0],第i天结束时的最大收益,但是这天手上还有股票了(不是光光是今天买没买股票)

dp[i][1],第i天结束时的最大收益,但是这天手上没股票了(不是光光是今天卖没卖股票)

第一种情况,手上还有股票,可能是今天买的,可能是之前买的但是今天没卖,那再分两种,取最大。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        dp = [[0, 0] for _ in range(n)]
        dp[0] = [-prices[0], 0]
        for i in range(1, n):
        //没有免费的午餐 只要是手上还有股票的情况,总有一天其中一天的profit是负的,得花钱买。但是没花钱买的时候,那就跟前一天一样,表示当天结束时没买也没卖的情况 dp[i][0] = max(dp[i-1][0], - prices[i])
        //dp[i-1][0]之前某一天低价买入花的钱。但是同时只能持有一只,所以如果是发生交易的情况,则必是卖了某个股票。那么就是和之前某一天买股票的钱构成差价项,只不过这个price由dp[i-1][0]表示,但其可能是 dp[i][1] = max(dp[i-1][1], + prices[i] + dp[i-1][0]) return dp[-1][-1]
                  写这一项需要考虑这是第几次买股票,如果不区分第几次那可以退化成1次,后面的卖也一样
dp[i][0] = max(今天没发生交易,低位没买股票买一下)(之前如果买了股票 再交易就只能卖 但是卖了就不会立即买 不然等于没交易 所以后一项是买)
dp[i][1] = max(今天没发生交易, 高位有股票卖一下)
dp[0][0]为了遵循定义,则需要是负的。dp[0][1]遵循定义则需要是0.

 

 

 

 

标签:买卖,股票,收益,最佳时机,max,prices,动态,price,dp
From: https://www.cnblogs.com/synapse331/p/17689094.html

相关文章

  • 接口使用的最佳时机
    1.引言接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序。在本文,我们将介绍什么是接口,在此基础上,通过一个例子来介绍接口的优点。但是接口也不是任何场景都可以随意使用的,我们会介绍接口使用的常见场景,同时也介绍了接口滥用可......
  • 接口使用的最佳时机
    1.引言接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序。在本文,我们将介绍什么是接口,在此基础上,通过一个例子来介绍接口的优点。但是接口也不是任何场景都可以随意使用的,我们会介绍接口使用的常见场景,同时也介绍了接口滥用可......
  • [代码随想录]Day40-动态规划part08
    题目:139.单词拆分思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。拆分时可以重复使用字典中的单词,说明就是一个完全背包!动规五部曲分析如下:确定dp数组以及下标的含义:dp[i]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字......
  • MyBatisCodeHelperPro支持动态解析sql
    通过setting找到插件搜索MyBatisCodeHelperPro点击【Install】进行安装github:https://github.com/gejun123456/MyBatisCodeHelper-Prohttps://brucege.com/doc/#/......
  • 为什么el-table-column的type属性不能动态变化?
    在ElementUI中,`el-table-column`组件的`type`属性无法动态变化,而`el-button`组件的`disabled`属性可以动态变化,这是因为这两个属性在实现上有所不同,涉及到了Vue组件的属性绑定方式和属性的响应性。`el-table-column`组件的`type`属性是静态属性,是在组件初始化阶段就确定的,无法通......
  • 昇腾实践丨ATC模型转换动态shape问题案例
    本文分享自华为云社区《ATC模型转换动态shape问题案例》,作者:昇腾CANN。ATC(AscendTensorCompiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及AscendIR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中,ATC会进行......
  • 昇腾实践丨ATC模型转换动态shape问题案例
    本文分享自华为云社区《ATC模型转换动态shape问题案例》,作者:昇腾CANN。ATC(AscendTensorCompiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及AscendIR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中,ATC会进行算......
  • 动态动态规划
    前置知识树剖传送门广义矩乘考虑矩乘大概是一个\(\suma\timesb\)的形式,那么考虑把它换成其他东西比如\(\proda\&b\)或者\(\maxa+b\),其实发现它们都可以用矩乘的理论优化,从另一个角度上讲floyd也是矩乘。定义数据结构维护带修改的dp,最常用的大概是线段树。当然......
  • vue+el-timeline动态表格时间线
    原文链接:https://blog.csdn.net/Shids_/article/details/126645038前言当我们需要在页面中展示一系列时间相关的事件时,常常会考虑使用时间线来呈现。而在vue框架中,我们可以借助一些组件库来快速实现时间线的功能。其中,el-timeline就是一款非常优秀的时间线组件,它可以帮助我们......
  • HTML5与CSS3实现动态网页(下)
    js完整的javascript是有ECMAScript(语法)BrowserObjects(DOMBOM)特性组成的。//单行注释/**/多行注释ECMASxript中的一切(变量函数名和操作符)都区分大小写1:什么是标识符变量函数属性的名字或者函的参数2:表示符命名规则有字符数字下划线或$符号......