leetcode 714. 买卖股票的最佳时机含手续费--zhengjun
用 \(f_{i,0}\) 表示到了第 \(i\) 天,当前买了股票的最大利润;\(f_{i,1}\) 表示到了第 \(i\) 天,当前没有买股票的最大利润。(还是不一定要刚好第 \(i\) 天满足这个条件,可以 \(1\to i\) 中的某个值满足)
显然,递推式就是
f[i][0]=max(f[i-1][0],f[i-1][1]-a[i]);
f[i][1]=max(f[i-1][1],f[i-1][0]+a[i]-k);//注意要在卖出的时候付这个手续费
代码
class Solution {
public:
int n,f[100001][2];
int maxProfit(vector<int>& a,int k) {
n=a.size();
f[0][0]=-a[0];
for(int i=1;i<n;i++){
f[i][0]=max(f[i-1][0],f[i-1][1]-a[i]);
f[i][1]=max(f[i-1][1],f[i-1][0]+a[i]-k);
}
return f[n-1][1];
}
};