312 Burst Balloons 戳气球

现有 n 个气球按顺序排成一排,每个气球上标有一个数字,这些数字用数组 nums 表示。
现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的气球的序号。 注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。
求所能获得硬币数量的最大值。
注意:
(1) 你可以认为 nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被戳破。
(2) 0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100
例子:
输入 [3, 1, 5, 8]
输出 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
详见:https://leetcode.com/problems/burst-balloons/description/

C++:

class Solution {
public:
    int maxCoins(vector<int>& nums) {
        int n=nums.size();
        nums.insert(nums.begin(),1);
        nums.push_back(1);
        vector<vector<int>> dp(nums.size(),vector<int>(nums.size(),0));
        for(int len=1;len<=n;++len)
        {
            for(int left=1;left<=n-len+1;++left)
            {
                int right=left+len-1;
                for(int k=left;k<=right;++k)
                {
                    dp[left][right]=max(dp[left][right],nums[left-1]*nums[k]*nums[right+1]+dp[left][k-1]+dp[k+1][right]);
                }
            }
        }
        return dp[1][n];
    }
};

参考:https://www.cnblogs.com/grandyang/p/5006441.html

原文地址:https://www.cnblogs.com/xidian2014/p/8831244.html

时间: 2024-10-27 18:36:27

312 Burst Balloons 戳气球的相关文章

Leetcode-312 Burst Balloons(戳气球)

1 #define maxn 1000000 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 3 #define pb push_back 4 class Solution 5 { 6 public: 7 int dp[503][503]; 8 int ms(vector<int>& nums,int le,int ri) 9 { 10 11 if(le==ri-1) 12 return 0; 13 if(dp[le][ri

LeetCode 312. Burst Balloons(戳气球)

参考:LeetCode 312. Burst Balloons(戳气球) java代码如下 class Solution { //参考:https://blog.csdn.net/jmspan/article/details/51208865 public int maxCoins(int[] nums) { int[] balls = new int[nums.length+2]; balls[0] = 1; balls[balls.length - 1] = 1; int[][] coins

312. Burst Balloons

/* * 312. Burst Balloons * 2016-7-4 by Mingyang */ public int maxCoins(int[] iNums) { int[] nums = new int[iNums.length + 2]; int n = 1; for (int x : iNums) if (x > 0) nums[n++] = x; nums[0] = nums[n++] = 1; int[][] dp = new int[n][n]; for (int k = 2

Leetcode 312. Burst Balloons

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 r

【LeetCode】312. Burst Balloons

题目: 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 a

452. Minimum Number of Arrows to Burst Balloons扎气球的个数最少

[抄题]: There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it's horizontal, y-coordinates don't matter and hence the x-coordinate

312. Burst Balloons - LeetCode

Question https://leetcode.com/problems/burst-balloons/description/ Solution 题目大意是,有4个气球,每个气球上有个数字,现在依次打这4个气球(可以看成两边还各有一个气球即1,3,1,5,8,1),第一次打5这处气球,你的得分是左边气球上的数乘右边气球上的数再乘被打气球上的数.按任意顺序打这4个气球,求最终得分最高的值. 思考:正向思考 反向思考: public int maxCoins(int[] nums) { //

LeetCode | 0452. Minimum Number of Arrows to Burst Balloons用最少数量的箭引爆气球【Python】

LeetCode 0452. Minimum Number of Arrows to Burst Balloons用最少数量的箭引爆气球[Medium][Python][区间贪心] Problem LeetCode There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of

[LeetCode][Java]Burst Balloons

Burst Balloons 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.