c++:
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int len = prices.size();
vector<int> maxProfit(len), cashWhenHoldOne(len);
maxProfit[0] = 0, cashWhenHoldOne[0] = -prices[0];
for (int i = 1; i < len; i++) {
maxProfit[i] = max(maxProfit[i-1], cashWhenHoldOne[i-1] + prices[i] - fee);
cashWhenHoldOne[i] = max(cashWhenHoldOne[i-1], maxProfit[i-1] - prices[i]);
}
return maxProfit[len-1];
}
};