public int maxProfit(int k, int[] prices) {
        if(k>(prices.length+1)/2){
            k=(prices.length+1)/2;
        }
        if(k==0) return 0;
        prices=handle(prices);
        return f(k,prices);
// 下面是另一种解法,使用的标准DP思想,复杂度也是多项式: N*N*N ,但是会超时
//       Integer[][] aux = new Integer[prices.length + 1][];
//        for (Integer i = 0; i < prices.length + 1; ++i) {
//            aux[i] = new Integer[k+1];
//            for (int j = 0; j < aux[i].length; ++j) {
//                aux[i][j] = new Integer(0);
//            }
//        }
//        for (Integer i = prices.length - 2; i >= 0; --i) {
//            for (Integer j = 1; j <=k; ++j) {
//                if (j > prices.length - i) {
//                    aux[i][j] = aux[i][j - 1];
//                    continue;
//                }
//                Integer t = aux[i + 1][j];
//                for (Integer m = i + 1; m < prices.length; ++m) {
//                    if (prices[m] - prices[i] + aux[m + 1][j-1] > t) {
//                        t = prices[m] - prices[i] + aux[m + 1][j-1];
//                    }
//                }
//                aux[i][j] = t;
//            }
//        }
//        return aux[0][k];
    }