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:
You may imagine nums[-1] = nums[n] = 1. They are not real therefore you can not burst them. 0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100 Example:
Input: [3,1,5,8] Output: 167 Explanation: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> [] coins = 315 + 358 + 138 + 181 = 167
Problem URL
给一个int数组,表示气球爆了之后能够获得的coins,得到的coins = nums[left] * nums[i] * nums[right] 。寻找能够获得最多coins的顺序,返回能得到的coin数。
Using dynamic programming. We add a to tail and head position to perform dp. dp[][] denotes the conis we could get from left to right. We start the window size with 3, so k = 2. Iterate in the window, from left to right. Return dp[0][n - 1] which means we have find to left and right most out of original nums.
Time Complexity: O(n^3) Space Complexity: O(n^2)