class Solution {
public int maxProfit(int[] prices, int fee) {
if(prices.length==0){return 0;}
int ans[][]=new int[prices.length][2];
ans[0][0]=0;
ans[0][1]=-prices[0];
for(int i=1;i<prices.length;i++){
ans[i][0]=Math.max(ans[i-1][0],ans[i-1][1]+prices[i]-fee);
ans[i][1]=Math.max(ans[i-1][1],ans[i-1][0]-prices[i]);
}
return Math.max(ans[prices.length-1][0],ans[prices.length-1][1]);
}
}
class Solution {
public int maxProfit(int[] prices, int fee) {
if(prices.length==0){return 0;}
int n0=0;
int n1=-prices[0];
for(int i=1;i<prices.length;i++){
int m0=n0;
n0=Math.max(n0,n1+prices[i]-fee);
n1=Math.max(n1,n0-prices[i]);
}
return Math.max(n0,n1);
}
}