首页 > 其他分享 >股票买卖问题总结

股票买卖问题总结

时间:2024-01-22 11:22:45浏览次数:27  
标签:总结 股票买卖 查看 max 代码 问题 点击 prices dp


其实也是动态规划的一种变形,总的来说,是定义一个二维数组dp[i][j],i表示的是天数,j表示的状态,总的表示收益。
最基础的就是有两种状态,dp[i][0]表示未持有股票,dp[i][1]表示持有股票。
用动态规划的思想:dp[i][0],dp[i][1]都是从dp[i-1]推得的。
只买卖一次:

点击查看代码
 dp[i][0] = max(dp[i - 1][0], -prices[i]);
 dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);

多次买卖:

点击查看代码
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 注意这里是和121. 买卖股票的最佳时机唯一不同的地方。
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
就是买股票的钱也可以由之前收益的钱出。

限制次数的买卖:
dp[i][0] = dp[i - 1][0];
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + prices[i]);
dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]);
dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);
就是需要多添加一些状态。
一般形式:

点击查看代码
for(int i=1;i<sz;i++){
    for(int j=0;j<=2*k;j++){
    if(j==0){dp[i][j]=dp[i-1][j];}
    else if(j%2==1){
        dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]-prices[i]);        
    }
    else if(j%2==0){
        dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+prices[i]);
    }
    
}
}

有冷冻期这题也是需要确定有几个状态:

点击查看代码
for(int i=1;i<sz;i++){
    dp[i][0]=max(dp[i-1][0],dp[i-1][3]);
    dp[i][1]=max(dp[i-1][1],max(dp[i-1][0]-prices[i],dp[i-1][3]-prices[i]));
    dp[i][2]=dp[i-1][1]+prices[i];
    dp[i][3]=dp[i-1][2];
}

标签:总结,股票买卖,查看,max,代码,问题,点击,prices,dp
From: https://www.cnblogs.com/yun-che/p/17979660

相关文章

  • ubuntu22.04 mysql服务每天自动shutdown问题
    1.问题描述MYSQL每天自动关闭,查看/var/log/mysql/error.log.1.gz,内容如下:2019-06-12T06:33:13.582973+08:000[Note]Shuttingdownplugin‘CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS’2019-06-12T06:33:13.583022+08:000[Note]Shuttingdownplugin‘CONNECTION_CON......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】[MySQL 用户变量/Pandas]面向过程编程
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/MySQL代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序......
  • 【Leetcode 2474. 购买量严格增加的客户】[MySQL 用户变量/Pandas]面向过程编程解决严
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/customers-with-strictly-increasing-purchases/description/MySQL代码#WriteyourMySQLquerystatementbelowwitht1as(selectcustomer_id,year(order_date)asmy_year,sum(price)......
  • 图论总结——拓扑排序
    图论总结——拓扑排序例\(1\):排水系统(不是很模板的模板题)思路模板题,但是要进行分数约分,所以又不是很模板直接进行计算即可。注意计算过程中很可能爆\(long~~long\)类型范围,需要用\(int128\)类型进行存储。代码#include<bits/stdc++.h>#defineintlonglongusingn......
  • 桶排序 -解决了什么问题
    桶排序法的优点高效的时间复杂度:在均匀分布的情况下,桶排序的平均时间复杂度接近线性,具有较高的排序效率。这是因为桶排序将元素分散到多个桶中,每个桶独立地进行排序,而不需要像比较排序算法那样逐个比较和交换元素。适用于外部排序:桶排序适用于需要排序的数据量非常大,无法全部......
  • 1/21 ST表总结
    RMQ问题:区间最值查询ST表:经过一次预处理后o(1)的离线查询任意区间最值(可重复贡献)利用区间dp的思想 f[i][j]=从i开始的2的j次方的最值f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1];模板voidST(){ for(inti=1;i<=n;i++) f[i][0]=a[i]; for(intj=1;j<25;j......
  • (区间覆盖问题)P5019 [NOIP2018 提高组] 铺设道路和Educational Codeforces Round 158 (
    区间覆盖问题这里EducationalCodeforcesRound158(RatedforDiv.2)b题和[NOIP2018提高组]铺设道路两道典型题目,本质是相同的。这里由于题目多次出现,特此记录。解题思路:首先我们得对区间做划分,那么划分思路可以是从小到大也可以是从大到小的异常点来做划分(我这是由大到......
  • 今日总结
    词频数统计问题描述统计一个文本文件中的每个单词的出现次数,数据格式: 首先通过textFile()函数将文件读入JavaRDD,然后通过flatMap算子将每一行的数据进行分割,得到多个String,一行数据分割得到的多个String以Iterator的迭代器格式返回,返回之后的Iterator中的每一个String都会作......
  • 寒假集训总结
    拓扑排序差分约束要求构造长度为\(n\)的序列使其满足\(m\)条形如\(a_i-a_j\lex_k\)或\(a_i<a_j\)的约束。对于每个约束\(a_i-a_j\lex_k\)由\(j\)向\(i\)连一条长度为\(x_k\)的有向边,若图中存在负环,则无解。若约束全部为\(a_i<a_j\)形式(即\(x\)......
  • 学习《机器学习》课程的一些总结
    回归(Regression)分类(Classification)朴素贝叶斯朴素贝叶斯(NB)是生成式(Generative)的。通过后验概率来进行分类(如:某一个物品在某一个类别的概率比较大,那么我们就认为这个物品属于这个类别)不妨假设数据服从二维正态分布,考虑利用训练集确定二维正态分布所需要的参数(均值\(\mu_1,\mu......