October 27, 2019

312. Burst Balloons

312. Burst Balloons

DP. 参考这个讲解

class Solution {
    public int maxCoins(int[] nums) {
        int[] coins = new int[nums.length + 2];
        int n = 1;
        for (int num : nums) {
            if (num != 0) {
                coins[n ++] = num;
            }
        }
        coins[0] = coins[n++] = 1;
        // state maxCoin: the max coins for the subarray from left to right;
        int[][] maxCoin = new int[n][n];
        for (int dis = 2; dis < n; dis++) {
            for (int left = 0; left + dis < n; left ++) {
                int right = left + dis;
                for (int i = left + 1; i <= right - 1; i++) {
                    maxCoin[left][right] = Math.max(maxCoin[left][right], 
                                                   coins[i] * coins[left] * coins[right] + maxCoin[left][i] + maxCoin[i][right]);
                }
                
            }
        }
        return maxCoin[0][n - 1];
    }
}
comments powered by Disqus