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]);