题目链接

有 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];
}
}

最新文章

  1. Shodan新手入坑指南
  2. ReorderList 的使用
  3. openfire+asmack搭建的安卓即时通讯(五) 15.4.12
  4. Windows服务安装完成后自动启动
  5. BZOJ 4300 绝世好题(位运算)
  6. Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map&amp;lt;K,V&amp;gt;
  7. 南阳OJ 16 矩形嵌套
  8. Node.js TLS/SSL
  9. 浅析Kubernetes的工作原理
  10. __x__(41)0909第五天__长表格
  11. 笔记《JavaScript 权威指南》(第6版) 系统理论知识概要
  12. (整理)REHL6.5_安装本地yum
  13. 关于 登录框的测试的一些case
  14. python学习日记(生成器函数进阶)
  15. .NET面试题系列(十三)Lucene底层原理
  16. MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
  17. Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
  18. JavaScript高级 面向对象(13)--构造函数的执行过程
  19. Ultra-QuickSort (POJ 2299)树状数组+离散化
  20. Dubbo2.7源码分析-Dubbo是如何整合spring-framework的

热门文章

  1. (转载)前端构建工具gulpjs的使用介绍及技巧
  2. 前端(十八)—— jQuery高级操作:选择器、文本属性与类、事件、文档操作、动画、结构关系
  3. MySQL 建库建表规范
  4. JUC源码分析-集合篇(四)CopyOnWriteArrayList
  5. Apriori-关联规则挖掘算法
  6. 2018 最新 spring boot 整合 swagger2 (swagger2 版本 2.8.0)
  7. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题
  8. (PASS)什么是原子性和原子性操作?
  9. python_django_在views模块中操作状态保持(session)
  10. vue tabNav 点击