【算法|动态规划 | 线性dp | 状态机模型】AcWing1049. 大盗阿福 1058. 股票买卖 V AcWing1059. 股票买卖 VI

本文主要是介绍【算法|动态规划 | 线性dp | 状态机模型】AcWing1049. 大盗阿福 1058. 股票买卖 V AcWing1059. 股票买卖 VI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。

目录

  • 一、AcWing1049. 大盗阿福
    • 题目解析
    • 解题代码
  • 二、AcWing1058. 股票买卖 V
    • 题目解析
    • 解题代码
  • 三、AcWing1059. 股票买卖 VI
    • 题目解析
    • 解题代码

一、AcWing1049. 大盗阿福

原题链接:点击直接跳转到该题目

题目解析

我们本题用到了两个一维dp表分别是f[i]g[i]

状态表示:

  • f[i]:表示偷窃第i家所能窃取的最大值
  • g[i]:表示不偷窃第i家所能窃取的最大值

状态转移方程:

  • f[i] = max(g[i - 1] + arr[i])
  • g[i] = max(f[i - 1],g[i - 1])

返回值:

  • max(f[n],g[n])

解题代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N  = 1e5 + 10;int main()
{int T;cin >> T;while(T--){int f[N],g[N],arr[N];int n;cin >> n;for(int i = 1;i <= n;i++) cin >> arr[i];// dp初始化f[1] = arr[1];for(int i = 1;i <= n;i++){f[i] = g[i - 1] + arr[i];g[i] = max(f[i - 1],g[i - 1]);}cout << max(f[n],g[n]) << endl;}
}

二、AcWing1058. 股票买卖 V

原题链接:点击直接跳转到该题目

题目解析

状态表示(dp[0/1/2][i]):

  • 0表示第i天结束后处于卖出状态,即手上没有股票
  • 1表示第i天结束后处于买入状态,即手上右股票
  • 2表示第i天结束后处于冷冻期(我们这里就可以理解为此时的第i天这一整天是处于冷冻期的)

返回值(结果值):

  • dp[0][n]

解题代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;- List itemconst int N = 1e5 + 10;
int prices[N];
int dp[3][N]; // 0表示卖出状态,1表示买入状态,2表示冷冻期int main()
{int n;cin >> n;for(int i = 1;i <= n;i++) cin >> prices[i];// dp初始化dp[1][1] = -prices[1];for(int i = 2;i <= n;i++) {dp[0][i] = max(dp[0][i - 1],dp[1][i - 1] + prices[i]);dp[1][i] = max(dp[1][i - 1],dp[2][i - 1] - prices[i]);dp[2][i] = dp[0][i - 1];}printf("%d\n",dp[0][n]);return 0;
}

三、AcWing1059. 股票买卖 VI

原题链接:点击直接跳转到该题目

题目解析

状态表示dp[0/1][i]0表示第i天结束后没有手上没有股票;1表示第i天结束后手上有股票。

  • dp[0][i]:表示第i天结束后手上没有股票的最大利益。
  • dp[1][i]:表示第i天结束后手上有股票的最大利益。

状态转移方程:

  • dp[0][i] = max(dp[0][i - 1],dp[1][i - 1]) + prices[i] - f
  • dp[1][i] = max(dp[1][i - 1],dp[0][i - 1] - prices[i])

返回值(即最终结果值):

  • 由于最终手中一定是没有股票的,所以最后的结果值为dp[0][n]

解题代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1e5 + 10;
int prices[N];
int dp[2][N];int main()
{int n,f;scanf("%d %d",&n,&f);for(int i = 1;i <= n;i++) cin >> prices[i];dp[1][1] = -prices[1];for(int i = 2;i <= n;i++){dp[0][i] = max(dp[0][i - 1],dp[1][i - 1] + prices[i] - f);dp[1][i] = max(dp[1][i - 1],dp[0][i - 1] - prices[i]);}printf("%d\n",dp[0][n]);return 0;
}

这篇关于【算法|动态规划 | 线性dp | 状态机模型】AcWing1049. 大盗阿福 1058. 股票买卖 V AcWing1059. 股票买卖 VI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/310020

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要