312. 戳气球【困难】【区间DP】
有 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
class Solution {
public int maxCoins(int[] num) {
if(num.length == 0 || num == null) return 0;
int n = num.length + 2;
int[] nums = new int[n];
nums[0] = nums[n-1] = 1;
for(int i=0; i<num.length; i++) nums[i+1] = num[i];
int[][] dp = new int[n][n];
for(int i=0; i<n; i++) {
dp[i][i] = 0;
}
for(int r = 2; r < n; r++) { //区间长度
for(int i = 0; i + r < n; i++) { //起点
int j = i + r; //终点
for(int k = i + 1; k < j; k++) { //枚举中间的分割线,不能和区间边界i、j重合
dp[i][j] = Math.max(dp[i][j],
dp[i][k] + dp[k][j] + nums[i] * nums[k] * nums[j]);
}
}
}
return dp[0][n-1];
}
}
312. 戳气球【困难】【区间DP】的更多相关文章
- Java实现 LeetCode 312 戳气球
312. 戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left ...
- Leetcode 312.戳气球
戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * n ...
- LeetCode 312. Burst Balloons(戳气球)
参考:LeetCode 312. Burst Balloons(戳气球) java代码如下 class Solution { //参考:https://blog.csdn.net/jmspan/art ...
- leetcode 戳气球
有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[ ...
- HDU 2476 String painter(区间dp)
题意: 给定两个字符串,让求最少的变化次数从第一个串变到第二个串 思路: 区间dp, 直接考虑两个串的话太困难,就只考虑第二个串,求从空白串变到第二个串的最小次数,dp[i][j] 表示i->j ...
- 区间dp之四边形不等式优化详解及证明
看了那么久的四边形不等式优化的原理,今天终于要写一篇关于它的证明了. 在平时的做题中,我们会遇到这样的区间dp问题 它的状态转移方程形式一般为dp[i][j]=min(dp[i][k]+dp[k+1] ...
- hdu 6049---Sdjpx Is Happy(区间DP+枚举)
题目链接 Problem Description Sdjpx is a powful man,he controls a big country.There are n soldiers number ...
- 【区间DP】【lgP3146】248
传送门 Description 给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少.注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3. In ...
- 区间dp复习 之 乘积最大
题目描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...
随机推荐
- Java-Class-E:org.springframework.http.HttpStatus
ylbtech-Java-Class-E:org.springframework.http.HttpStatus 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. /* * C ...
- 快速列出大纲.提纲.归纳知识点 思维导图工具Xmind
博客搬迁,给您带来的不便敬请谅解! http://www.suanliutudousi.com/2017/10/23/%E5%BF%AB%E9%80%9F%E5%88%97%E5%87%BA%E5%A ...
- 如果在vue中实现一个输入框的抖动效果?
1. 先来理下思路? 1)抖动就是摆动,现实中的钟摆可以很形象. 2)当摆动到临界点后,就会向相反的方向摆动. 3)在没有动力时,摆动会慢慢停止. 2.用法: :start.sync 里面是抖动器名字 ...
- windows IIS FTP 不支持创建多级目录
昨天因为这个事情搞了好久,因为客户那边使用的是IIS 上的FTP ,想着都差不多试着运行,结果竟然报错,说"错误550 文件不可用" 是在GetResponse()出现的异常,我用 ...
- 淘宝内核月报2014-11-draft
内核月报2014-11-draft MySQL· 捉虫动态·OPTIMIZE 不存在的表 bug 描述 这是一个和 GTID 相关的Bug,也就是说5.6才会有,并且出现这个 bug 需要满足条件: ...
- 随笔记录 yum -y clean all出错解决方案
出现以下问题的解决方案: 使用解决方案之前,要先确定一下几种情况: 1.检查光盘是否挂载 2.ISO映像文件是否使用正确 解决方案1: rm -rf /var/cache/yum/* yum repo ...
- 将一个压缩文件分成多个压缩文件;RAR文件分卷
有时候需要上传压缩文件,但是限制了单个文件的大小,那我们怎么才能将一个比较大的压缩文件分割成多个压缩文件,从而符合要求的进行文件的上传呢?这里小编告诉你一个技巧. 工具/原料 电脑 winrar(一般 ...
- Deb版本Linux配置Selenium+Chrome+Java实现自动化测试
1.安装chrome sudo apt-get install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/li ...
- Linux --赋予普通用户root 权限
Linux的普通用户在安装一些东西的时候或者执行命令的时候,终端始终会提示权限不够,我们会将这个普通用户赋予root权限,但是,和root还是有区别的,因为只能执行root规定好的一些操作命令. 1. ...
- Linux系统升级
查看centos版本的命令:uname -r 升级版本:yum -y upgrade 重启:reboot