class Solution {
public:
int maxProfit(vector<int>& p, int fee) {
// dp[i][0]:第i天持有 = max(dp[i-1][1]-p[i], dp[i-1][0])
// dp[i][1]=max(dp[i-1][0] + p[i]-fee, dp[i-1][1]) 第i天没有持有
int dp[p.size()][2];
int ans = 0;
for(int i = 0; i < p.size(); i++) {
dp[i][0] = dp[i][1] = 0;
if(!i) {
dp[i][0] = -p[i];
dp[i][1] = 0;
} else {
dp[i][0] = max(dp[i-1][1]-p[i], dp[i-1][0]);
dp[i][1] = max(dp[i-1][0] + p[i] - fee, dp[i-1][1]);
}
ans = max(ans, dp[i][1]);
}
return ans;
}
};