La machine d' état de stock directe dp, et la deuxième dimension état de l' enregistrement fera.
Nous compterons les frais de manutention lorsque nous achetons (important!)
Si nous ne détenons le stock ce jour - là, il peut être qu'il n'a pas eu lieu hier, ou il peut être vendu aujourd'hui. out
si les détenteurs de la journée, peuvent avoir lieu hier, il est également possible aujourd'hui que vient d'acheter
le retour final de la dernière journée n'a pas tenu
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
//在卖出的时候要支付手续费,所以在利润小于2的时候不要卖出,尽量减少交易次数
//dp[i]表示以第i天为结尾能达到的最大值,状态机dp,dp[i][0]表示当天不持有,dp[i][1]表示当天持有
vector<vector<int>> dp(prices.size(),vector<int>(2));
//basecase:
dp[0][0] = 0;
dp[0][1] = -fee-prices[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]-fee-prices[i]);
}
return dp[prices.size()-1][0];
}
};