leetcode Burst Balloons
2015-11-30 14:52
330 查看
Given
indexed from
Each balloon is painted with a number on it represented by array
You are asked to burst all the balloons. If the you burst balloon
will get
Here
adjacent indices of
After the burst, the
becomes adjacent.
Find the maximum coins you can collect by bursting the balloons wisely.
Note:
(1) You may imagine
them.
(2) 0 ≤
100
Example:
Given
Return
原文地址(我的新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++
java
本文地址:http://www.hrwhisper.me/leetcode-burst-balloons/
您所在位置:细语呢喃 > leetcode
Burst Balloons
本文由 hrwhisper 原创发布,转载请点名出处
nballoons,
indexed from
0to
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
iyou
will get
nums[left] * nums[i] * nums[right]coins.
Here
leftand
rightare
adjacent indices of
i.
After the burst, the
leftand
rightthen
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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解