您的位置:首页 > 其它

leetcode Burst Balloons

2015-11-30 14:52 330 查看
Given 
n
 balloons,
indexed from 
0
 to 
n-1
.
Each balloon is painted with a number on it represented by array 
nums
.
You are asked to burst all the balloons. If the you burst balloon 
i
 you
will get 
nums[left] * nums[i] * nums[right]
 coins.
Here 
left
 and 
right
 are
adjacent indices of 
i
.
After the burst, the 
left
 and 
right
 then
becomes adjacent.

Find the maximum coins you can collect by bursting the balloons wisely.

Note: 

(1) You may imagine 
nums[-1] = nums
= 1
. They are not real therefore you can not burst
them.

(2) 0 ≤ 
n
 ≤ 500, 0 ≤ 
nums[i]
 ≤
100

Example:

Given 
[3, 1, 5, 8]


Return 
167

nums = [3,1,5,8] --> [3,5,8] -->   [3,8]   -->  [8]  --> []
coins =  3*1*5      +  3*5*8    +  1*3*8      + 1*8*1   = 167


原文地址(我的新blog):http://www.hrwhisper.me/leetcode-burst-balloons/

题意:

给定n个气球。每次你可以打破一个,打破第i个,那么你会获得nums[left] * nums[i] * nums[right]个积分。 (nums[-1] = nums = 1)求你可以获得的最大积分数

思路:

看了discuss是dp[i][j]为打破的气球为i~j之间。

我们可以想象:最后的剩下一个气球为i的时候,可以获得的分数为:nums[-1]*nums[i]*nums
.

那么介于i,j之间的x,有: dp[i][j] = max(dp[i][j], dp[i][x – 1] + nums[i – 1] * nums[x] * nums[j + 1] + dp[x + 1][j]);

C++
class Solution {
public:
int maxCoins(vector<int>& nums) {
int n = nums.size();
nums.insert(nums.begin(), 1);
nums.insert(nums.end(), 1);
vector<vector<int> > dp(n + 2, vector<int>(n + 2, 0));
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n - k + 1; i++) {
int j = i + k - 1;
for (int x = i; x <= j; x++) {
int temp = dp[i][x - 1] + nums[i - 1] * nums[x] * nums[j + 1] + dp[x + 1][j];
if (dp[i][j] < temp)
dp[i][j] = temp;
}
}
}
return dp[1]
;
}
};


java

public class Solution {
public int maxCoins(int[] iNums) {
int n = iNums.length;
int[] nums = new int[n + 2];
for (int i = 0; i < n; i++) nums[i + 1] = iNums[i];
nums[0] = nums[n + 1] = 1;
int[][] dp = new int[n + 2][n + 2];
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n - k + 1; i++) {
int j = i + k - 1;
for (int x = i; x <= j; x++) {
dp[i][j] = Math.max(dp[i][j], dp[i][x - 1] + nums[i - 1] * nums[x] * nums[j + 1] + dp[x + 1][j]);
}
}
}
return dp[1]
;
}
}


本文地址:http://www.hrwhisper.me/leetcode-burst-balloons/

您所在位置:细语呢喃 > leetcode
Burst Balloons

本文由 hrwhisper 原创发布,转载请点名出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode