蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组

目录

一、最大子数组和

二、买卖股票最佳时机IV

三、第N个泰波那契数

四、环形数组


一、最大子数组和

1.状态表示

dp[i]:到第i数字,所有的最大和。

2.状态转移方程

dp[i]=max(dp[i-1]+p[i],p[i])(加入这个点是0)

我们来想一下,这个数组分为两种情况,要不他这个连续子数组长度只是一个,这样他就只是p[i],要不他这个数组长度不是一个,这样他就需要看他前面的i-1这个元素,当i-1位置的时候,dp[i-1]就是最大和(可能我们会陷入一个误区,认为这个数组,假如i-1位置是负数,那么肯定是不选i-1位置最好啊。那么假如我们不选这个i位置,他也就相当于连续数组断开了,他就是单个的数组。

3.初始化

最开始的必须要选择,所以说就是nums[0]

4.填表顺序

从左到右

5.返回值

return  返回dp表中最大值即可

class Solution {public int maxSubArray(int[] nums) {int m=nums.length;int []dp=new int[m];if(m==1){return nums[0];}dp[0]=nums[0];for(int i=1;i<m;i++){dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);}int ret=-0x3f3f3f3f;for(int i=0;i<m;i++){ret=Math.max(ret,dp[i]);}return ret;}
}

二、买卖股票最佳时机IV

买卖股票最终弹

1.状态表示

f[i][k]:第m天处于已经买入但是没有卖出状态,第k笔交易所获的第最大利润

g[i][k]:第m天处于已经卖出但是没有买入的状态,第k笔交易所获的第最大利润

2.状态转移方程

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

g[i][j]Math.max(g[i-1][j],f[i-1][j-1]+prices[i]);

3.初始化

我们可以观察到g[][]=只有一个地方是等于j-1,那么也就是说,我们只需要初始化一个地方就可以,也就是只要初始化i就行,至于j我们将进行单独的操作

g[i][j]= g[i-1][j];

if(j-1>=0){

g[i][j]= Math.max(g[i-1][j],f[i-1][j-1]+prices[i]);

这个地方最有细节的地方要讲一下,怎么样,才算交易一次,我们这里面的交易一次,是需要卖出,而不是买入就算一次交易,因为如果这么算的话,初始化就和我们之前所进行的操作不同了,只有当卖出后,才算一次交易

f[0][0]=-prices[0];

g[0][0]=0;

假如你想的是买入就算一次,

下面这个式子才应该是正确的,因为第0次,其实并不算一次,所以我们也需要定到k+1,这样他的下标才是k

如果你想要定义只有k ,那么就要我们去思考怎么去更好的表达状态。f我认为它是属于交易之内的东西,所以,他也就不会出现直接交易一次,而是开始0下标的时候就出现,加入是交易一次,那么f在第0天的时候就应该是1了

4.填表顺序

从左到右,两个表一起填写

class Solution {public int maxProfit(int k, int[] prices) {int m=prices.length;k = Math.min(k, m / 2);int f[][]=new int[m][k+1];int g[][]=new int[m][k+1];for(int i=0;i<=k;i++){f[0][i]=g[0][i]=-0x3f3f3f3f;}f[0][0]=-prices[0];g[0][0]=0;for(int i=1;i<m;i++){for(int j=0;j<=k;j++){g[i][j]= g[i-1][j];f[i][j]=Math.max(f[i-1][j],g[i-1][j]-prices[i]);if(j-1>=0){g[i][j]= Math.max(g[i-1][j],f[i-1][j-1]+prices[i]);}}}int ret=0;for(int i=0;i<=k;i++){ret=Math.max(ret,g[m-1][i]);}  return ret;}
}

三、第N个泰波那契数

第N个泰勒那数

1.状态表示

dp[i]:以i位置结尾的,第i个泰波那契数。

2.状态转移方程

dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

3.初始化

dp[0]=0,dp[1]=1,dp[2]=1;

4.填表顺序

从左到右

5.返回值 返回dp[n]

class Solution {public int tribonacci(int n) {
//状态表示
int dp[]=new int[n+1];
if(n==0){
return 0;
}else if(n==1||n==2){return 1;
}dp[0]=0;dp[1]=1;dp[2]=1;for(int i=3;i<=n;i++){dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
}return dp[n];}
}

四、环形数组

1.状态表示

dp[i]:到第i位置,返回的非空数组最大和

2.状态转移方程

dp[i]=max(dp[i-1]+p[i],p[i])

这个题的难点就是在于他的数组一前一后那种值怎么处理,就是

既然它分为这两种情况,那么我们的状态表示也要重新制定一下

1.f[i]:表示到达i位置,最大的数组和。

2.g[i]:表示到达i位置,最小的数组和。

f[i]=Math.max(f[i-1]+p[i],p[i])

g[i]=Math.min(g[i-1]+p[i],p[i])

3.填表顺序

从左到右,两个表一起填写

4.初始化

开始的时候 f[0]=nums[0];
    g[0]=nums[0];简单粗暴即可

5.返回值,返回ret

class Solution {public int maxSubarraySumCircular(int[] nums) {int m=nums.length;int []dp=new int[m];int sum=0;for(int i=0;i<m;i++)
{sum=nums[i]+sum;
}    if(m==1){return nums[0];}int []f=new int[m];int []g=new int[m];f[0]=nums[0];g[0]=nums[0];for(int i=1;i<m;i++){f[i]=Math.max(f[i-1]+nums[i],nums[i]);g[i]=Math.min(g[i-1]+nums[i],nums[i]);}int ret=-0x3f3f3f3f;for(int i=0;i<m;i++){
//这个操作,是针对特殊情况,比如说,全是负的-3,-2,-3,这个情况的时候,sum==g[i]也就是说最小值等于总和,这样我会对这个进行处理,ret和f[i]做比较if(sum-g[i]==0){ret=Math.max(ret,f[i]);continue;}ret=Math.max(ret,Math.max(f[i],sum-g[i]));}return ret;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/175879.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】Spring MVC请求响应

文章目录 1. 请求1.1 传递单个参数1.2 传递多个参数1.3 传递对象1.4 后端参数重命名1.5 传递数组1.6 传递集合1.7 传递JSON对象1.8 获取URL中参数1.9 上传⽂件1.10 获得Cookie1.11 获得Session1.12 获得Header 2. 响应2.1 返回静态界面2.2 返回数据2.3 返回HTML代码片段2.4 返回…

Vue3 + Tsx 集成 ace-editor编辑器

Ace Editor介绍 Ace Editor&#xff08;全名&#xff1a;Ajax.org Cloud9 Editor&#xff09;是一个开源的代码编辑器&#xff0c;旨在提供强大的代码编辑功能&#xff0c;通常用于构建基于Web的代码编辑应用程序。它最初由Cloud9 IDE开发&#xff0c;现在由开源社区维护。 主…

SAM:Segment Anything 代码复现和测试 基本使用

相关地址 代码&#xff1a; https://github.com/facebookresearch/segment-anything 在线网站&#xff1a; https://segment-anything.com/demo 环境配置 建议可以clone下来学习相关代码&#xff0c;安装可以不依赖与这个库 git clone https://github.com/facebookresearch…

前端HTML

文章目录 一、什么是前端前端后端 前端三剑客1.什么是HTML2.编写前端的步骤1.编写服务端2.浏览器充当客户端访问服务端​ 3.浏览器无法正常展示服务端内容(因为服务端的数据没有遵循标准)4.HTTP协议>>>:最主要的内容就是规定了浏览器与服务端之间数据交互的格式 3. 前…

Angular-03:组件模板

各种学习后的知识点整理归纳&#xff0c;非原创&#xff01; 组件模板 ① 数据绑定② 属性绑定③ 类名绑定④ 样式绑定⑤ 事件绑定⑥ 获取原生DOM对象6.1 在组件模板中获取6.2 在组件类中获取 ⑦ 双向数据绑定⑧ 内容投影8.1 select选择器8.2 单槽投影8.3 多槽投影 ⑨ 安全操作…

【Overload游戏引擎细节分析】PBR材质Shader---完结篇

PBR基于物理的渲染可以实现更加真实的效果&#xff0c;其Shader值得分析一下。但PBR需要较多的基础知识&#xff0c;不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染&#xff0c;其理论较多&#xff0c;需要的基础知识也较多&#xff0c;我在这就不再写一遍了&…

leetcode:374. 猜数字大小(二分查找)

一、题目 函数原型&#xff1a;int guessNumber(int n) 二、思路 本题其实就是从 1 - n 中找出所要的答案。利用guess函数来判断数字是否符合答案。 答案小于当前数字&#xff0c;guess函数返回-1 答案等于当前数字&#xff0c;guess函数返回0 答案大于当前数字&#xff0c;gue…

nginx 转发数据流文件

1.问题描述 后端服务&#xff0c;从数据库中查询日志&#xff0c;并生成表格文件返回静态文件。当数据量几兆时&#xff0c;返回正常&#xff0c;但是超过几十兆&#xff0c;几百兆&#xff0c;就会超过网关的连接超时时间30秒。 时序图 这里面主要花费时间的地方在&#xff…

启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported

问题描述 启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported 出现这个一般就是node版本的问题&#xff0c;通过命令查看node -v查看node版本&#xff1b; 百度查了好多&#xff0c;都让我降低node版本&#xff0c;属实太麻烦了 在不改node版本的…

【C# Programming】委托和lambda表达式、事件

目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制 1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.1…

博弈论学习笔记(2)——完全信息静态博弈

前言 这部分我们学习的是完全信息静态博弈&#xff0c;主要内容包括博弈论的基本概念、战略式博弈、Nash均衡、Nash均衡解的特性、以及Nash均衡的应用。 零、绪论 1、什么是博弈论 1&#xff09;博弈的定义 博弈论&#xff1a;研究决策主体的行为发生直接相互作用时候的决策…

Java架构师软件架构的演化和维护

目录 1 导学2 软件架构演化和定义3 面向对象软件架构演化4 软件架构演化方式的分类5 软件架构演化原则6 软件架构演化评估方法7 大型网站架构演化8 软件架构维护想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 软件架构演化和定义 软件架构的演化和维护就是对…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

飞鼠异地组网工具全网互通实战指南

飞鼠异地组网工具全网互通实战指南 一、飞鼠异地组网工具介绍1.1 飞鼠工具简介1.2 飞鼠工具官网 二、本次实践介绍2.1 本次实践前提2.2 本次实践简介2.3 本次实践环境规划 三、异地组网配置3.1 进入中心控制器节点管理后台3.2 网卡设置3.3 进入子网节点管理后台3.4 网卡设置 四…

项目综合实训,vrrp+bfd,以及策略路由的应用

目录 一&#xff0e; 项目需求 二&#xff0e; Visio设备画图 三&#xff0e; 设备选型 三&#xff0e;vlan规划 四&#xff0e;Ip地址规划 五&#xff0e;实验拓扑图 六&#xff0e;配置过程及结果 项目需求 1.S1作为VLAN10的主网关和根桥&#xff0c;S2作为v…

Pytorch L1,L2正则化

L1正则化和L2正则化是常用的正则化技术&#xff0c;用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化&#xff08;Lasso正则化&#xff09;&#xff1a; 正则化项形式&#xff1a;L1正则化使用模型参数的绝对值之和作为正则化…

Emscripten + CMakeLists.txt 将 C++ 项目编译成 WebAssembly(.wasm)/js,并编译 Html 测试

背景&#xff1a;Web 端需要使用已有的 C 库&#xff08;使用 CMake 编译&#xff09;&#xff0c;需要将 C 项目编译成 WebAssembly(.wasm) 供 js 调用。 上篇文章《Mac 上安装 Emscripten》 已讲解如何安装配置 Emscripten 环境。 本篇文章主要讲解如何将基于 CMakeLists 配…

Gitee 发行版

Gitee 发行版 1、Gitee 发行版管理2、项目仓库中创建发行版本3、项目中导入3.1 gradle配置3.2 dependencies执行正常&#xff0c;包没有下载 1、Gitee 发行版管理 Gitee 发行版&#xff08;Release&#xff09;管理 2、项目仓库中创建发行版本 按照Gitee官网操作就行 3、项目…

PCIe 访问 EP 配置空间,空间映射详解,BDF 计算偏移

访问 EP 的配置空间方法 内存映射IO 访问 内存访问配置空间 前置知识 PCIe 设备的寻址是按照 BDF 即 Bus-Device-Function 来组织的。访问某个设备则需要根据BDF计算偏移地址。 两种不同的内存访问配置空间方法 类 xilinx&#xff0c;基地址 偏移地址访问 // linux-5.10\…

http1,https,http2,http3总结

1.HTTP 当我们浏览网页时&#xff0c;地址栏中使用最多的多是https://开头的url&#xff0c;它与我们所学的http协议有什么区别&#xff1f; http协议又叫超文本传输协议&#xff0c;它是应用层中使用最多的协议&#xff0c; http与我们常说的socket有什么区别吗&#xff1f; …