有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。

求所能获得硬币的最大数量。

说明:

你可以假设 nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被戳破。
0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100
示例:

输入: [3,1,5,8]
输出: 167
解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
coins = 315 + 358 + 138 + 181 = 167

解题思路

数组含义:dp[i][j]在【i,j】区间内获得硬币的最大值
状态转移: dp[i][j]= Math.max(dp[i][j],dp[i][k-1]+dp[k+1][j]+helper[k]helper[i-1]helper[j+1]);

在【i,j】区间内,选择不同的位置k作为最后一个戳破的气球,那么k两边的气球区间都要被全部戳破
选择最优的位置k取得当前区间的最优解。
初始化:考虑到边界问题,将nums首尾多加两个的1
*

代码

class Solution {public int maxCoins(int[] nums) {int n=nums.length;if(n==0) return 0;int[][] dp=new int[n+2][n+2];int[] helper=new int[n+2];helper[0]=helper[n+1]=1;for(int i=0,j=1;j<=n;i++,j++)helper[j]=nums[i];for(int len=1;len<=n;len++)for(int i=1;i+len-1<=n;i++){int j=i+len-1;for(int k=i;k<=j;k++)dp[i][j]= Math.max(dp[i][j],dp[i][k-1]+dp[k+1][j]+helper[k]*helper[i-1]*helper[j+1]);}return dp[1][n];}
}

leetcode312. 戳气球(动态规划)相关推荐

  1. LeetCode312 戳气球

    回溯思想 很显然涉及求最值,没有任何奇技淫巧,一定是穷举所有可能的结果,然后对比得出最值 所以说,只要遇到求最值的问题,首先要思考的就是:如何穷举所有可能的结果 穷举主要有两种算法:就是回溯算法和动态 ...

  2. LeetCode·312.戳气球·动态规划

    312.戳气球 题目 示例 思路 首先必须要说明,这个题目的状态转移方程真的比较巧妙,所以说如果你看了题目之后完全没有思路恰恰是正常的.虽然最优答案不容易想出来,但基本的思路分析是我们应该力求做到的. ...

  3. [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]

    [问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...

  4. LeetCode312:戳气球

    要求 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.戳破第 i 个气球,你可以获得 nums[i - 1] * num ...

  5. 戳气球--LeetCode312

    戳气球–LeetCode312 题目 有 n个气球,编号为0到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums中. 现在要求你戳破所有的气球.每当你戳破一个气球 i时,你可以获得 num ...

  6. 经典动态规划:戳气球问题

    点击上方蓝字设为星标 东哥带你手把手撕力扣~ 作者:labuladong   公众号:labuladong 若已授权白名单也必须保留以上来源信息 今天我们要聊的这道题「Burst Balloon」和之 ...

  7. 算法学习笔记——动态规划:戳气球

    LeetCode 312. 戳气球 数组 nums 中,保存了每个气球上的数字,戳破一个气球,得分是nums[i - 1] * nums[i] * nums[i + 1](若越界,认为两个边界上有数值 ...

  8. 312. Burst Balloons 戳气球

    Title 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.如果你戳破气球 i ,就可以获得 nums[left] * nu ...

  9. 【LeetCode】312. 戳气球

    312. 戳气球(困难) 解法一:动态规划 首先看一个区间: 区间(i,j) 是一个开区间,因为我们只能戳爆 i 和 j 之间的气球,不能戳爆索引为 i 和 j 的气球. 我们不妨考虑该区间内被戳爆的 ...

最新文章

  1. 苹果系统的自带的系统录屏软件中新录制的视频会出现在这里!
  2. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)
  3. HTTP方法:幂等性和安全性
  4. 【Python】PyCharm新建PythonPackage呈现出普通Dictionary的样式的解决方法
  5. 使用 Adobe AIR 管理 WordPress 评论
  6. Java实现图片文件的上传和获取
  7. 技术圈儿002---高并发整体可用性:一文详解降级、限流和熔断
  8. python requests form data_Python requests模块 multipart/form-data类型文件上传
  9. C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
  10. jQuery.validator.addMethod 自定义验证方法
  11. 软工实践Alpha冲刺(6/10)
  12. 使用javascript生成的植物显示过程特效
  13. Promise.all和Promise.race区别,和使用场景
  14. 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍
  15. 杀猪、打狗、护牛、赛马、放虎——几种管理方法
  16. 使用 React-Sketchapp
  17. 数字标签转化为one-hot形式的tensor
  18. 复旦大学python教学视频_B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载...
  19. 学会Zbrush硬表面建模,造出属于自己的机甲模型
  20. Spire.Doc利用word样式读取word文字内容(.NET)

热门文章

  1. libpcap讲解与API接口函数讲解
  2. 【原理+实战+视频+源码】docker映射端口教程
  3. 从新手到Flutter架构师,一篇就够!学习路线+知识点梳理
  4. 知乎上已获千赞,持续更新中
  5. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...
  6. Linux环境变量总结
  7. TensorFlow MNIST 入门 代码
  8. 为mysql数据库建立索引
  9. 使用charles 抓取手机上的操作
  10. Leetcode: LRU Cache