动态规划18:188. 买卖股票的最佳时机 IV
动态规划解题步骤:
1.确定状态表示:dp[i]是什么
2.确定状态转移方程:dp[i]等于什么
3.初始化:确保状态转移方程不越界
4.确定填表顺序:根据状态转移方程即可确定填表顺序
5.确定返回值
题目链接:188. 买卖股票的最佳时机 IV - 力扣(LeetCode)

题解:
本题与动态规划17:123. 买卖股票的最佳时机 III 几乎无异
1.状态表示:
f[k][i]表示截止第i天,第i天为可买入状态的最大利润,且当前已交易k次
g[k][i]表示截止第i天,第i天为可卖出状态的最大利润,且当前已交易k次
2.状态转移方程:
f[k][i]=max(f[k][i-1],g[k-1][i-1]+prices[i])
g[k][i]=max(g[k][i-1],f[k][i-1]-prices[i])
3.初始化:初始化第一列为负无穷(-0x3f3f3f3f),另外 f[0][0]=0 g[0][0]=-prices[0];
注意:对于f表,其本应该初始化第一行和第一列,但是为了优化代码和g表保持一致,可以只初始化第一列,对于第一行的数据只需对其状态转移方程添加位置判断即可,对于不合法的位置其状态转移方程为f[k][i-1],合法位置的状态转移方程为max(f[k][i-1],g[k-1][i-1]+prices[i])
4.填表顺序:从上往下,从左往右,两个表一起填
5.返回值:返回第n-1天为可买入状态的最大利润(交易次数可能为0、1、2......K)所以需要遍历第n-1列
class Solution {
public:int maxProfit(int K, vector<int>& prices) {const int INF=0x3f3f3f3f;//f[k][i]表示截止第i天,第i天为可买入状态的最大利润,且当前已交易k次//g[k][i]表示截止第i天,第i天为可卖出状态的最大利润,且当前已交易k次//第i天为可买入状态,则前一天有两种情况:前一天为可买入状态,交易次数相同,今天什么也没做;// 前一天为可卖出状态,交易次数少1,今天卖出了股票//f[k][i]=max(f[k][i-1],g[k-1][i-1]+prices[i])//第i天为可卖出状态,则前一天有两种情况:前一天为可卖出状态,交易次数相同,今天什么也没做// 前一天为可买入状态,交易次数相同,今天买了股票//g[k][i]=max(g[k][i-1],f[k][i-1]-prices[i])size_t n=prices.size();//处理边界条件if(n==1) return 0;//创建dp表vector<vector<int>> f(K+1,vector<int>(n,-INF));vector<vector<int>> g(K+1,vector<int>(n,-INF));//初始化(创建dp表时已初始化一部分,相当于初始化了第一列)f[0][0]=0;g[0][0]=-prices[0];//填表for(int k=0;k<=K;++k){for(int i=1;i<n;++i){if(k-1>=0) f[k][i]=max(f[k][i-1],g[k-1][i-1]+prices[i]);else f[k][i]=f[k][i-1];g[k][i]=max(g[k][i-1],f[k][i-1]-prices[i]);}}//返回值int ans=INT_MIN;for(int k=0;k<=K;++k)if(f[k][n-1]>ans) ans=f[k][n-1];return ans;}
};相关文章:
动态规划18:188. 买卖股票的最佳时机 IV
动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:188.…...
YOLOv8改进 - 注意力篇 - 引入ShuffleAttention注意力机制
一、本文介绍 作为入门性篇章,这里介绍了ShuffleAttention注意力在YOLOv8中的使用。包含ShuffleAttention原理分析,ShuffleAttention的代码、ShuffleAttention的使用方法、以及添加以后的yaml文件及运行记录。 二、ShuffleAttention原理分析 ShuffleA…...
基于Multisim的8路彩灯循环控制电路设计与仿真
1)由八个彩灯LED的明暗构成各种彩灯图形; 2)彩灯依次显示的图形: 彩灯从左至右渐亮至全亮(8个CP) 彩灯从左至右渐灭至全灭(8个CP) 彩灯从右至左渐亮至全亮(8个CP) 彩灯从右至左渐灭至全灭(8个CP) 彩灯全亮(1个CP) 彩灯全灭(1个CP) 彩灯全亮(1个CP) 彩灯全灭(1个CP) 3)彩灯图形循…...
完整的模型训练套路 pytorch
**前置知识: 1、 (1).train():将模型设置为训练模式 (2).eval():将模型设置为评估模式 不写也可以(只对特定网络模型有作用,如含有Dropout的) 2、 with…...
2024年十大前沿图像分割模型汇总:工作机制、优点和缺点介绍
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
Notepad++将搜索内容所在行选中,并进行复制等操作
背景 Notepad在非常多的数据行内容中,按照指定内容检索,并定位到具体行,而后对内容行的数据进行复制、剪切、删除等处理动作。 操作说明 检索并标记所在行 弹出搜索框:按下 Ctrl F。 输入查找字符串:在搜索框中输入要…...
[Java EE] IP 协议 | NAT 机制 | 路由选择 | MAC 地址 | 域名解析服务
Author:MTingle major:人工智能 Build your hopes like a tower! 目录 一. 初识 IP 协议 IP 协议报头: 二. IP 协议如何管理地址 NAT机制 路由选择 三. 数据链路层(以太网): MAC地址 四. 域名解析系统 一. 初识 IP 协议 IP 协议工作在网络层,其目标是为了在复…...
赋能特大城市水务数据安全高速运算,深圳计算科学研究院YashanDB数据库系统斩获“鼎新杯”二等奖
第三届“鼎新杯”数字化转型应用优秀案例评选结果日前正式公布,深圳计算科学研究院联合深圳市环境水务集团有限公司申报的《深圳环境水务国产数据库YashanDB,赋能特大城市水务数据安全高速运转》案例,经过5个多月的评审,从4000申报…...
RAYDATA链接PGSQL做图表
1.拖一个脚本进去 2.拖一个柱状图进去 3.双击脚本写代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Ventuz.Kernel; using Npgsql; using System.Threading; using System.Threading.Tasks;public class Script…...
UE5里的TObjectPtr TSharedPtr TWeakPtr有什么区别
在 Unreal Engine(UE)编程中,TObjectPtr、TSharedPtr 和 TWeakPtr 都是 指针类型,但它们在生命周期管理和使用场景上有不同的特点。让我们详细分析这些指针的区别和用途。 TObjectPtr TObjectPtr 是 UE5 中引入的新智能指针类型…...
前端--深入理解HTTP协议
HTTP 协议简介 HTTP(HyperText Transfer Protocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如 HTML、CSS、JavaScript 等)。它是万…...
线性代数 向量
一、定义 几何定义:向量是一个有方向和大小的量,通常用箭头表示。向量的起点称为原点,终点称为向量的端点。 代数定义:向量是一个有序的数组,通常表示为列向量或行向量。 行向量就是 1*n的形式(行展开&…...
go中阶乘实现时递归及迭代方式的比较
package mainimport ("fmt""time""math/big" )// 使用递归和 big.Int 计算阶乘 func FactorialRecursive(n *big.Int) *big.Int {if n.Cmp(big.NewInt(0)) 0 {return big.NewInt(1)}return new(big.Int).Mul(n, FactorialRecursive(new(big.Int…...
Jupyter notebook中更改字体大小
文章目录 方法一:局部修改方法二:全局修改 Jupyter notebook提供了一个非常方便的跨平台交互代码编译环境,但是单元格的内的代码字体往往显示较小,不利于观看。本人查了很多方法来调整字体,后来发现既不需要更改jupyte…...
关于Ubuntu服务器的时间同步设置以及Linux什么时候开始使用swap虚拟内存
一、关于Ubuntu服务器的时间同步设置 首先我们检查一下服务器的时区设置和当前时间值,获取/etc/timezone 配置以及使用date命令查看当前时间。 rootiZ2ze7n2ynw18p6bs92fziZ:~# cat /etc/timezone Asia/Shanghai rootiZ2ze7n2ynw18p6bs92fziZ:~# date Wed Dec 21 …...
Java Stream API 详解
Java Stream API 详解 1. 什么是 Stream API? Stream API 是 Java 8 引入的一种用于处理集合(如数组、列表)的强大工具。它提供了一种声明性方式处理数据,可以简化代码并提高可读性。Stream 不是数据结构,它只是一种…...
一文了解大模型中的SDK和API
大白话聊SDK和API-知乎 1.智谱AI的SDK和API 以智谱AI为例,智谱AI的SDK是名为zhipuai的Python包,其中包含了用于访问API的接口(如api-key)。在这个框架中,API是SDK的一部分,用于实现与智谱AI服务的交互。 …...
element plus的el-select分页
摘要: el-select的数据比较多的时候,必须要分页,处理方案有全部数据回来,或者添加搜索功能,但是就有个问题就是编辑的时候回显问题,必须要保证select的数据有对应的id与name匹配回显! <el-fo…...
STM32CubeMX【串口收发USART】
第一步,配置cubemx 配置好点右上角生成 第二步,串口方式 阻塞式发送 英文、中文正常、浮点有口 /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的 发送到串口助手上 while (1){/* USER CODE…...
【学术会议投稿】Java Web开发实战:从零到一构建动态网站
【会后3-4个月检索|IEEE出版】第五届人工智能与计算机工程国际学术会议(ICAICE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看: https://ais.cn/u/nuyAF3 目录 引言 一、Java Web开发基础 1. Java Web开发简介 2. 开发环境搭建 …...
低成本搭建方案:树莓派运行OpenClaw连接千问3.5-9B云接口
低成本搭建方案:树莓派运行OpenClaw连接千问3.5-9B云接口 1. 为什么选择树莓派OpenClaw组合 去年冬天,我在整理个人知识库时被重复的文件归档工作折磨得苦不堪言。当时尝试过各种自动化工具,要么需要昂贵的云服务订阅,要么对硬件…...
2025届毕业生推荐的AI辅助写作网站实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 着手降低AIGC痕迹存有三方面。一方面来讲,关乎对句式结构予以调整,要…...
商品详情API的SLA保障体系:监控告警、异常检测与自动化修复
在电商业务中,商品详情API是连接前端展示与后端数据的核心枢纽,其稳定性、可用性直接决定用户体验与业务转化——用户点击商品卡片后,若API响应延迟、数据异常或服务中断,会直接导致用户流失、订单损失。SLA(服务等级协…...
3步打造waifu2x-caffe轻量化部署方案:图像增强绿色版打包全流程
3步打造waifu2x-caffe轻量化部署方案:图像增强绿色版打包全流程 【免费下载链接】waifu2x-caffe waifu2xのCaffe版 项目地址: https://gitcode.com/gh_mirrors/wa/waifu2x-caffe waifu2x-caffe是一款基于深度学习的图像增强工具,能够通过AI算法实…...
Lumerical入门指南:从网格设置到材料库管理的实用技巧
1. 网格设置:从基础操作到高级技巧 第一次打开Lumerical时,网格设置可能是最让人困惑的部分。记得我刚接触这个软件时,经常因为网格设置不当导致仿真结果异常。网格就像建筑的地基,设置不当会导致整个仿真结构不稳。 在Lumerical中…...
新企业应该优先选择SEO还是网络推广_SEO和网络推广的具体操作方法有哪些
新企业应该优先选择SEO还是网络推广_SEO和网络推广的具体操作方法有哪些 在数字化营销的时代,新企业在选择推广策略时面临着两大选择:SEO(搜索引擎优化)和网络推广。两者各有优劣,本文将详细探讨新企业应优先选择哪种…...
PHP的扩展的生命周期的庖丁解牛
"PHP 扩展 (Extension)"的生命周期,常被误解为“一个 .so 或 .dll 文件被加载进内存”那么简单。 但本质上,它是 C 语言编写的底层模块与 PHP Zend 引擎之间的一次“深度联姻”。 它的生命周期严格绑定在 PHP 进程(或 FPM 子进程&a…...
SEO_全面介绍SEO是什么,以及为什么它如此重要(127 )
SEO是什么? 在互联网时代,网站的流量和用户参与度直接关系到企业的成功。而在众多获取网站流量的方法中,搜索引擎优化(SEO)是最为关键和有效的一种。SEO是什么?SEO是搜索引擎优化的简称,它是通…...
Spring Boot整合EasyExcel,动态导出表头和数据
前端页面设置了列表表头 的动态查询,用户可以自己设置那些需要关注的字段,为此,后端需要保持导出的表头与前端一致。 本文介绍如何使用spring booteasyExcel,动态导出数据。 步骤1.设置实体类 Data public class RepairWorkOrder …...
Cadence xrun文件扩展名黑科技:用-vlog_ext参数管理混合语言验证环境
Cadence xrun文件扩展名管理实战:混合语言验证环境的高效配置技巧 在数字IC验证领域,多语言混合仿真已成为复杂SoC验证的常态。Verilog、SystemVerilog和VHDL文件往往混杂在同一个项目中,更棘手的是,不同团队可能对相同语言采用不…...
