题链:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
题意:告诉接下来n天的股票价格,每天手里最多能有一股股票,每进行一次买加卖股票需要一定的手续费,问最大利润。
思路:如果没有手续费的话,可直接贪心,最低的时候买,升到最高卖。但是有了手续费就不行了,考虑dp。
dp[i][0]:表示第i天手里没股票的最大利润
dp[i][1]:表示第i天手里有股票的最大利润
转移方程:
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]-fee)
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-a[i])
初值:
dp[0[0]=0
dp[0][1]=-a[0]
class Solution {
public:
int maxProfit(vector<int>& p, int fee) {
int n = p.size();
int dp[n][2];
dp[0][0]=0,dp[0][1]=-p[0];
for(int i=1;i<n;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+p[i]-fee);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-p[i]);
}
return dp[n-1][0];
}
};