博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 戳气球
阅读量:6847 次
发布时间:2019-06-26

本文共 1456 字,大约阅读时间需要 4 分钟。

有 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 =  3*1*5      +  3*5*8    +  1*3*8      + 1*8*1   = 167
class Solution {    public int maxCoins(int[] nums) {        int len = nums.length;        int[] langarr = new int[len+2];        langarr[0] = 1;        for (int i = 0, j = 1; i < len; i++, j++) langarr[j] = nums[i];        len = langarr.length;        int[][] dp = new int[len][len];        langarr[len-1] = 1;        for (int i = 2; i < len; i++) {            for (int j = 0; j+i < len; j++) {                for (int k = j+1; k < j+i; k++) {                    dp[j][j+i] = Math.max(dp[j][j+i], dp[j][k]+dp[k][j+i]+langarr[j]*langarr[k]*langarr[j+i]);                }            }        }        return dp[0][len-1];    }}

dp[i][j]的含义是 第i个气球到第j个气球(不包含i,j) ,最好的扎法能得多少分。

dp[j][j+i] = Math.max(dp[j][j+i], dp[j][k]+dp[k][j+i]+langarr[j]*langarr[k]*langarr[j+i]); 以上是最精华的递推公式,这种属于分治思想,分治的动态规划题 dp为二维的时候,从短的长度到长的长度去渗透, k的含义是,假设k是最后一个扎破的气球, 这个想法最关键(自己想到了分治,但是总是感觉左右会有依赖没法分),也是这道题最难想到的点,最后一个扎破的气球的左边和右边是完全没有依赖关系的,可以分别运算的部分。 如果k是最后一个扎破的,那么最后一次的得分也可以得出。

转载于:https://www.cnblogs.com/tobemaster/p/9446518.html

你可能感兴趣的文章
Nginx+Windows负载均衡(转载)
查看>>
[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
查看>>
优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。
查看>>
微软最有价值专家大中华峰会花絮视频
查看>>
Chapter 1 First Sight——25
查看>>
64bit Centos6.4搭建hadoop-2.5.1
查看>>
前端开发必备!Emmet使用手册
查看>>
node-load module
查看>>
前端性能优化策略
查看>>
Clion使用MinGW编译好的boost库
查看>>
c#超时锁定
查看>>
Android 自定义View实现多行RadioGroup (MultiLineRadioGroup)
查看>>
mac office
查看>>
Leetcode: Valid Word Abbreviation
查看>>
动态生成页面(一)——ASP.NET中Literal使用
查看>>
集合框架_DAY17
查看>>
【ichartjs】用ichartjs替代Excel做直方图
查看>>
unix调试工具:lsof
查看>>
国内各IE内核浏览器所调用的IE版本--转了
查看>>
Vector3.Set的正确使用
查看>>