Description:

有n个气球,编号为0n-1,每个气球都有一个分数,存在nums数组中。每次吹气球i可以得到的分数为 nums[left] * nums[i] * nums[right],left和right分别表示i气球相邻的两个气球。当i气球被吹爆后,其左右两气球即为相邻。要求吹爆所有气球,得到最多的分数。

Explanation:

给出 [4, 1, 5, 10]
返回 270

nums = [4, 1, 5, 10] burst 1, 得分 4 * 1 * 5 = 20
nums = [4, 5, 10]    burst 5, 得分 4 * 5 * 10 = 200
nums = [4, 10]       burst 4, 得分 1 * 4 * 10 = 40
nums = [10]          burst 10, 得分 1 * 10 * 1 = 10

总共的分数为 20 + 200 + 40 + 10 = 270

Solution;

Dynamic programming. dp[start][end] 表示从start到end的最大分数。当mid气球吹爆的时候,left和right变成相邻的气球,此时如果将mid吹爆再切割,则不方便转移,那么就以mid为分割点,先吹爆两侧的气球。mid最后吹爆,所以midScore=(start-1)*mid*(end+1)。直至切分到start和end相等时,化简成三个气球的最小组合,吹爆当前气球。

dp的四要素:

Definition:
dp[i][j]表示吹爆i到j之间的气球所能得到的最大分数

Function:
dp[i][j] = max(dp[i][k-1] + score(k) + dp[k+1][j]) 对于所有k属于{i,j}

Intialize:
dp[i][j] = 0 for each i&j.

Answer:
dp[1][n]

public class Solution {/*** @param nums a list of integer* @return an integer, maximum coins*/public int maxCoins(int[] nums) {// Write your code hereint len = nums.length;int[][] dp = new int[len+2][len+2];int[][] visit = new int[len+2][len+2];int[] numsPlus = new int[len+2];for(int i = 1;i<len + 1;i++){numsPlus[i] = nums[i - 1];}numsPlus[0] = 1;numsPlus[len+1] = 1;int result = search(dp , visit , numsPlus , 1 , len);return result;}public int search(int[][] dp , int[][] visit , int[] numsPlus , int start , int end){if(visit[start][end] == 1){return dp[start][end];}int res = 0;for(int i = start ; i<=end ; i++){int mid = numsPlus[start-1]*numsPlus[i]*numsPlus[end+1];int right = search(dp , visit , numsPlus , start , i - 1);int left = search(dp , visit , numsPlus , i + 1 , end);res = Math.max(res , mid + right + left);}visit[start][end] = 1;dp[start][end] = res;return res;}
}

lintcode(168)吹气球相关推荐

  1. LintCode 249. 统计前面比自己小的数的个数

    给定一个整数数组(下标由 0 到 n-1, n 表示数组的规模,取值范围由 0 到10000).对于数组中的每个 ai 元素,请计算 ai 前的数中比它小的元素的数量. 注意事项 We suggest ...

  2. scala报错20/08/31 23:48:40 WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, 192.168.28.94, exec

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  3. deepin10.15安装cuda10.1.168 cudnn7.6.1 tensorflow_gpu1.4.0

    deepin10.15安装cuda10.1.168 cudnn7.6.1 tensorflow_gpu1.4.0 最近入坑deepin操作系统,基于debian9,和Ubuntu具有一样的操作习惯,由 ...

  4. 品牌故事第11期之IBM:连亏168亿都逆袭,蓝色巨人的百年兴衰史

    https://www.toutiao.com/a6700496808159740424/ 追溯品牌历史,挖掘科技背后故事,大家好,这里是每周日准时与大家见面的品牌故事,我是各位的老朋友游戏日报阿野. ...

  5. LintCode: Max Tree

    题目 Given an integer array with no duplicates. A max tree building on this array is defined as follow ...

  6. 【LintCode: 3. 统计数字】算法题解析

    这是一道来自LintCode的算法题目,本文用C++来解答这道题,链接为: https://www.lintcode.com/problem/digit-counts/description 题目描述 ...

  7. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?...

    代码: package com.liron.p1; /*** 一个整数,它加上100后是一个完全平方数,再加上168又是* 一个完全平方数,请问该数是多少?* */ public class Topi ...

  8. Forbid consumer 192.168.85.1 access service com.sharearn.dubbo.romote.TestService from registry

    为什么80%的码农都做不了架构师?>>>    com.alibaba.dubbo.rpc.RpcException:Forbid    consumer192.168.85.1 a ...

  9. ssh: connect to host 192.168.57.131 port 22: Conne

    为什么80%的码农都做不了架构师?>>>    文档背景: 重新克隆了一台centos机器,由于时间太久,已经忘了之前Xshell远程连接是如何配置的了.只记得,需要关闭防火墙.现将 ...

  10. 路由器管理页面html,196.168.1.1登陆页面网址

    196.168.1.1手机怎么登陆? 解决方法如下: 1.路由器设置网址是192.168.1.1,而非196.168.1.1,故此无法登陆原因是网址输入错误. 2.在手机端浏览器输入网址192.168 ...

最新文章

  1. nginx php-fpm 运行原理
  2. jsonp数据库拿数据到html页面,前端如何优雅的使用jsonp获取接口数据
  3. Hibernate中基本概念
  4. Day11多态部分-6 【1.3 对象的向上转型和向下转型】
  5. from mysql_MySQL的FROM
  6. Android插件化开发之动态加载技术系列索引
  7. 微服务网关Gateway
  8. java学习(142):file类的基本创建
  9. Oracle常用的几个父栓
  10. nagios监控mysql服务_nagios监控mysql及邮件报警
  11. [SOA] Mule ESB 3.x 入门(二)—— 配置(spring, properties, log4j)
  12. linux C++ socket编程 实例
  13. PopClip翻译插件开发记录-microsoft_translate.popclipext
  14. aspectjweaver的作用
  15. dSYM文件的汇编分析
  16. 按关键字采集淘特商品列表API接口H5
  17. cf1677C. Tokitsukaze and Two Colorful Tapes(div1)
  18. 燕麦云何洋开讲丨真假海盗?黑客杠上好莱坞,还要把电影变成现实
  19. 如何提高条形码识别率
  20. ES搜索结果中各个字段介绍,hits,took,timeout

热门文章

  1. 网络加密流量的相关研究
  2. python爬虫qq音乐歌词_Python如何爬取qq音乐歌词到本地
  3. 卸载一个游戏计算机里还有文件,如何处理pc游戏卸载后留下的残余文件?
  4. 常见的计算机音频缩写,音响系统常见英文缩写,你知道几个?
  5. 依赖注入:语法糖胜于功能组合
  6. 人工智能在计算机领域的应用论文,人工智能应用领域论文 关于人工智能领域的大学论文...
  7. 高等数学考研笔记(九)
  8. c语言瑞年条件,C语言如何判断是闰年,闰年判断条件
  9. 零基础入门前端工程师必备书籍推荐
  10. python自动图片拼接——基于Pillow和os