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

Day 46 动态规划 part12

Day 46 动态规划 part12

  • 解题理解
    • 309
    • 714

2道题目
309. 买卖股票的最佳时机含冷冻期
714. 买卖股票的最佳时机含手续费

解题理解

309

这道题不太好理解,需要考虑的情况很多并且不好确定。可以设置每天的状态有4种:
dp[i][0] 今天持有股票
dp[i][1] 今天保持卖出
dp[i][2] 今天卖出
dp[i][3] 今天冷冻
dp[i][0]可以从以下三种状态得到:昨天持有,昨天冷冻今天买,昨天保持卖出今天买。
dp[i][1]可以从以下两种状态得到:昨天保持卖出,昨天冷冻
dp[i][2]只能从一种情况得到:昨天持有今天卖。
dp[i][3]只能从一种情况得到:昨天卖出。
这里需要注意将今天保持卖出和今天卖出作两种情况的考虑,这样能让每种情况都可以从前一天的一种情况中递推过来,而且还能让今天的冷冻状态只保持一天。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp = [[0] * 4 for _ in range(len(prices))]
        # dp[i][0] 今天持有股票
        # dp[i][1] 今天保持卖出
        # dp[i][2] 今天卖出
        # dp[i][3] 今天冷冻
        dp[0][0] = -prices[0]
        for i in range(1, len(prices)):
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i])
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][3])
            dp[i][2] = dp[i - 1][0] + prices[i]
            dp[i][3] = dp[i - 1][2]
        return max(dp[-1][3], dp[-1][2], dp[-1][1])

714

跟昨天一道题几乎一样,只需要对卖出股票时添加手续费即可。

class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        n = len(prices)
        dp = [[0] * 2 for _ in range(n)]
        dp[0][0] = -prices[0]
        for i in range(1, n):
            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][0] + prices[i] - fee)
        return dp[-1][-1]

http://www.kler.cn/news/107799.html

相关文章:

  • 【问题】在安装torchvision的时候,会自动安装torch?
  • 【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点
  • 软考系列(系统架构师)- 2009年系统架构师软考案例分析考点
  • 【JAVA学习笔记】50 - Math类,Array类,System类,BigInteger和BigDecimal类
  • IO流框架,缓冲流
  • 【Codeforces】 CF79D Password
  • CompletableFuture 实战
  • 公网远程访问macOS本地web服务器
  • 23种设计模式(10)——门面模式
  • css:如何通过不同的值,改变盒子的样式和字体颜色通过computed而不是v-if
  • Operator开发之operator-sdk入门
  • XMLHttpRequest拦截请求和响应
  • Unity性能优化一本通
  • YOLOv5 onnx \tensorrt 推理
  • uniapp接口请求api封装,规范化调用
  • Go 实现插入排序算法及优化
  • 软考系列(系统架构师)- 2013年系统架构师软考案例分析考点
  • 5月22日比特币披萨日,今天你吃披萨了吗?
  • 【计算机网络】认识协议
  • Spring Boot拓展XML格式的请求和响应
  • 『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
  • leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间
  • Linux:【1】Linux中的文件权限概念和相关命令
  • Hive 视图和索引
  • Spring Security—配置(Configuration)
  • 命令行参数、环境变量
  • 集合总结(Java)
  • JavaScript_Pig Game切换当前玩家
  • 【Linux】权限完结
  • 从lc560“和为 K 的子数组“带你认识“前缀和+哈希表“的解题思路