序号:714
地址: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee
开发语言:python或C++
题目:买卖股票的最佳时机含手续费
难度: 中等
规则:
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
int maxProfit(vector<int>& prices, int fee) {
int n = prices.size();
vector<vector<int>> dp(n,vector<int>(2));// 用dp[i][0]表示卖出获取的最大利益dp[i][1]表示买入获取的最大利益
dp[0][0] = 0;
dp[0][1] = -prices[0];
for (int i = 1; i < n; i++)
{
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i] - fee); //卖出
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);// 买入
}
return max(dp[n - 1][0], dp[n - 1][1]);
}