苏州外贸网站推广,南京电商网站建设,有趣的网站源码,中山公司注册给定一个整数数组 prices#xff0c;其中 prices[i]表示第 i 天的股票价格 #xff1b;整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易#xff0c;但是你每笔交易都需要付手续费。如果你已经购买了一个股票#xff0c;在卖出它之前你就不能再继续购买股票了…给定一个整数数组 prices其中 prices[i]表示第 i 天的股票价格 整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易但是你每笔交易都需要付手续费。如果你已经购买了一个股票在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
注意这里的一笔交易指买入持有并卖出股票的整个过程每笔交易你只需要为支付一次手续费。 示例 1
输入prices [1, 3, 2, 8, 4, 9], fee 2
输出8
解释能够达到的最大利润:
在此处买入 prices[0] 1
在此处卖出 prices[3] 8
在此处买入 prices[4] 4
在此处卖出 prices[5] 9
总利润: ((8 - 1) - 2) ((9 - 4) - 2) 8
示例 2
输入prices [1,3,7,5,10,3], fee 3
输出6提示
1 prices.length 5 * 1041 prices[i] 5 * 1040 fee 5 * 104
class Solution {
public:int maxProfit(vectorint prices, int fee) {//多加一个手续费//分析没有冷冻期没有次数限制。那么状态只有两个。持有和不持有//持有01、前一天就是持有 dp[i-1][0]//2、今天刚好买 dp[i-1][1]-prices[i];//不持有11、前一天就是不持有dp[i-1][1];//2、今天刚好卖dp[i-1][0] prices[i] - fee 小费vectorvectorintdp(prices.size()1,vectorint(3));//初始化dp[0][0] -prices[0];dp[0][1] 0;for(int i 1;i prices.size();i){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 max(dp[prices.size()-1][0], dp[prices.size()-1][1]);}
};