int[][]dp=new int[2][prices.length];dp[0][0]=-prices[0];for(int i=1;i<prices.length;i++){ dp[0][i]=Math.max(dp[0][i-1],-prices[i]); dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]);}return dp[1][prices.length-1];
int[][]dp=new int[2][prices.length];dp[0][0]=-prices[0];for(int i=1;i<prices.length;i++){ dp[0][i]=Math.max(dp[1][i-1]-prices[i],dp[0][i-1]); dp[1][i]=Math.max(dp[0][i-1]+prices[i],dp[1][i-1]);}return dp[1][prices.length-1];
int[][]dp=new int[4][prices.length];dp[0][0]=-prices[0];dp[2][0]=-prices[0];for(int i=1;i<prices.length;i++){ dp[0][i]=Math.max(dp[0][i-1],-prices[i]); dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]); dp[2][i]=Math.max(dp[2][i-1],dp[1][i-1]-prices[i]); dp[3][i]=Math.max(dp[3][i-1],dp[2][i-1]+prices[i]);}return Math.max(dp[1][prices.length-1],dp[3][prices.length-1]);
if(k==0|| prices.length==1||prices.length==0){ return 0;}int[][]dp=new int[2*k][prices.length];for(int i=0;i<=2*k-2;i+=2){ dp[i][0]=-prices[0];}for(int i=1;i<prices.length;i++){ for(int j=0;j<2*k;j+=2){ if(j==0){ dp[j][i]=Math.max(dp[j][i-1],-prices[i]); dp[j+1][i]=Math.max(dp[j+1][i-1],dp[j][i-1]+prices[i]); }else{ dp[j][i]=Math.max(dp[j][i-1],dp[j-1][i-1]-prices[i]); dp[j+1][i]=Math.max(dp[j+1][i-1],dp[j][i-1]+prices[i]); } }}return dp[2*k-1][prices.length-1];
int[][]dp=new int[2][prices.length];dp[0][0]=-prices[0];for(int i=1;i<prices.length;i++){ dp[0][i]=Math.max(dp[0][i-1],dp[1][i-1]-prices[i]); dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]+prices[i]-fee);}return dp[1][prices.length-1];
int[][]dp=new int[3][prices.length];dp[1][0]=-prices[0];for(int i=1;i<prices.length;i++){ dp[0][i]=Math.max(dp[0][i-1],dp[2][i-1]); dp[1][i]=Math.max(dp[1][i-1],dp[0][i-1]-prices[i]); dp[2][i]=Math.max(dp[2][i-1],dp[1][i-1]+prices[i]);}return Math.max(dp[0][prices.length-1],dp[2][prices.length-1]);