zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    布局管理
    菜单和工具栏
    Hello World,本章学习Qt的基本功能
    PyQt5中文手册
    qemu-kvm使用
    查看内核日志
    tmux快捷键
    vim插件YouCompleteMe安装
    git submodule删除多余模块
    vim ctags
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8831244.html
Copyright © 2011-2022 走看看