dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+price[i])
dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-price[i])
由于k是无穷大,可以将k简化掉
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+price[i])
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-price[i])
又由于手续费的原因,在买股票时要多扣fee
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+price[i])
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-price[i]-fee)
显然i
只与i-1
有关,可以进一步简化
dp0=max(dp0,dp1+prices[i])
dp1=max(dp1,dp0-prices[i]-fee)
int maxProfit(vector<int>& prices, int fee) {
int dp0=0,dp1=INT_MIN;
for(int i=0;i<prices.size();++i){
dp0=max(dp0,dp1+prices[i]);
dp1=max(dp1,dp0-prices[i]-fee);
}
return dp0;
}