zoukankan      html  css  js  c++  java
  • 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 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 = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167

    Approach #1: DP.[C++]

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

      

    Analysis:

    temp[i][j] = maxCoin(nums[i:j])

    ans = temp[1][n]

    temp[i][j] = max(temp[i][j], temp[i][k-1] + nums[i-1]*nums[k]*nums[j+1] + temp[k+1][j]);

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    AVFrame 解析
    Mat与图像的基本概念
    linux基本操作
    Makefile 使用
    MySQL的安装与配置——详细过程
    k8s imagePullPolicy拉取策略
    K8S拉取Django项目创建pod
    Harbor单点仓库部署
    Django项目构建发布Harbor仓库
    K8S集群部署-二进制部署
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10340001.html
Copyright © 2011-2022 走看看