用 f i , 0 f_{i,0} fi,0 表示到了第 i i i 天,当前买了股票的最大利润; f i , 1 f_{i,1} fi,1 表示到了第 i i i 天,当前没有买股票的最大利润。(还是不一定要刚好第 i i i 天满足这个条件,可以 1 → i 1\to i 1→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];
}
};