码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 312. Burst Balloons(戳气球)

时间:2018-12-29 01:11:37      阅读:783      评论:0      收藏:0      [点我收藏+]

标签:初始   get   默认   ret   blank   span   target   根据   是什么   

  参考:LeetCode 312. Burst Balloons(戳气球)

  java代码如下

class Solution {
    //参考:https://blog.csdn.net/jmspan/article/details/51208865
    public int maxCoins(int[] nums) {
        int[] balls = new int[nums.length+2];
        balls[0] = 1;
        balls[balls.length - 1] = 1;
        int[][] coins = new int[balls.length][balls.length];
        for(int i = 0; i < nums.length; i++)
        {
            balls[i+1] = nums[i];
        }
        
        for(int j = 2; j < balls.length; j++)
        {
            for(int i = j - 2; i >= 0; i--)
            {
                for(int k = j -1; k > i; k--)
                {
                    /* 这个里面的coins[i][k]  + balls[i]*balls[k]*balls[j] + coins[k][j]
                        是最大的可以这样理解:以k分割(为什么会有k,因为无论怎么戳,最后剩三个
                        的时候,一定是i,j和另一个,另一个就是k,那么要总的结果最大,那么要k
                        两边的值都取最
                        大,两边值最大是什么:即coins[i][k],coins[k][j],先戳两边的把两个最
                        大找出来,最后左右两边剩什么呢,正是最左边的balls[i]和最右边的balls[j],
                        最后处理k处的即balls[i]*balls[k]*balls[j]
                    */
                    coins[i][j] = Math.max(coins[i][j], coins[i][k]
                                          + balls[i]*balls[k]*balls[j] + coins[k][j]);
                }
            }
        }
        
        return coins[0][balls.length - 1];
    }
}

  代码中分析了重点代码,采用了动态规划,从最小的情况出发,慢慢扩大,每次都取最大(最优)的结果,最终的结果也是最优的

  三层循环:j:最右值,i:最左值,k:中间值,三层循环从小到大获取不同长度,不同位置的数组的一段的最值coins[i][j],coins[i][j]不包括两端,初始时coins是int数组默认都是0,符合实际情况,最后返回一个最长的也即最大的结果,难点就是分析到数组的某一段剩3个元素i,j,k时的情形,可以根据这个情形反推之前要如何处理,即k前后都取最大,即这时的最大值为coins[i][k] + balls[i]*balls[k]*balls[j] + coins[k][j],个人见解,希望对你有帮助。

LeetCode 312. Burst Balloons(戳气球)

标签:初始   get   默认   ret   blank   span   target   根据   是什么   

原文地址:https://www.cnblogs.com/liunianfeiyu/p/10193496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!