这是一道hard题,和之前的买股票三都是同一类型,无非是限制的k为2或不知到k的值,但解决思路都是一样,三重dp,第一维记录第几天,第二位记录还最多能交易的次数,第三维记录手中是否存有股票,具体见算法思想中的股票问题。
public int maxProfit(int k, int[] prices) { int [][][] dp=new int[prices.length+1][k+1][2]; for(int i=0;i<=k;i++) { dp[0][i][0]=0; dp[0][i][1]=Integer.MIN_VALUE; } for(int i=1;i<prices.length+1;i++) for(int j=1;j<=k;j++) { dp[i][j][0]=Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i-1]); dp[i][j][1]=Math.max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i-1]); } return dp[prices.length][k][0]; }