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;
}
本文介绍了一种使用动态规划解决股票交易问题的方法,通过优化递推公式,实现了在考虑交易费用的情况下计算最大利润。文章详细展示了状态转移方程的推导过程,并给出了简洁的代码实现。

259

被折叠的 条评论
为什么被折叠?



