Burst|Burst Balloons

【Burst|Burst Balloons】http://www.lintcode.com/en/problem/burst-balloons/

package com.LintCode.BurstBalloons; public class Solution { /* * @param nums: A list of integer * @return: An integer, maximum coins */ public int maxCoins(int[] nums) { // write your code here int m = nums.length + 2; int[] arr = new int[m]; System.arraycopy(nums, 0, arr, 1, m - 2); arr[0] = 1; arr[m - 1] = 1; int[][] dp = new int[m][m]; //表示从i到j的最大收益 for (int len = 1; len < m - 1; len++) { for (int left = 1; left + len - 1 < m - 1; left++) { int right = left + len - 1; //k是最后一个破的。所以它的收益就是乘以左边界左边和右边界的右边 for (int k = left; k <= right; k++) { dp[left][right] = Math.max(dp[left][right], arr[left - 1] * arr[k] * arr[right + 1] + dp[left][k - 1] + dp[k + 1][right]); } } } return dp[1][m - 2]; } }

    推荐阅读