zoukankan      html  css  js  c++  java
  • 动态规划——Burst Ballons

    题意:
    给定n个气球。每次你可以打破一个,打破第i个,那么你会获得nums[left] * nums[i] * nums[right]个积分。 (nums[-1] = nums[n] = 1)求你可以获得的最大积分数。
    Note:
    You may imagine nums[-1] = nums[n] = 1. They are not real therefore you can not burst them.
    0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100
    Example:
    Input: [3,1,5,8]
    Output: 167
    Explanation: 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
    dp[i][j]为打破的气球为i~j之间。
    我们可以想象:最后的剩下一个气球为i的时候,可以获得的分数为:nums[-1]*nums[i]*nums[n].
    那么介于i,j之间的x,有: dp[i][j] = max(dp[i][j], dp[i][x – 1] + nums[i – 1] * nums[x] * nums[j + 1] + dp[x + 1][j]);  这个非常的像矩阵连乘法那个题。
    不过如果不熟悉矩阵链乘法或者忘了的可能不太能理解为什么有nums[i – 1] * nums[x] * nums[j + 1],其实很简单,dp[i][x – 1]和dp[x + 1][j]代表已经要打破的气球k两侧已经打破的气球的区间,
    所以此时要是在计算第k个气球时它左右两侧的气球可不一定是第k-1和第k+1个气球,因为这两个气球极有可能已经在dp[i][x – 1]和dp[x + 1][j]两个区间中被打破而应该视为不存在的,这种情况下由于
    dp[i][x – 1]和dp[x + 1][j]两个区间的气球全部被打破不能考虑,易知此时离第k个气球最近的左右两侧能加入计算的气球是第j-1和第j+1个气球。
     
     1 public int maxCoins(int[] nums) {
     2         int len = nums.length;
     3         int[]num = new int[len+2];
     4         int[][]dp = new int[len+2][len+2];
     5         for(int i = 0;i<=len+1;i++)
     6             if(i==0||i==len+1)num[i] = 1;
     7             else num[i] = nums[i-1];
     8         int j = 0,temp = 0;
     9         for(int k = 1;k<=len;k++) {
    10             for(int i = 1;i<=len-k+1;i++) {
    11                 j = i+k-1;
    12                 for(int x = i;x<=j;x++) {
    13                     temp = dp[i][x-1]+num[i-1]*num[x]*num[j+1]+dp[x+1][j];
    14                     dp[i][j] = dp[i][j]>temp?dp[i][j]:temp;
    15                 }
    16             }
    17         }
    18         return dp[1][len];
    19     }
  • 相关阅读:
    HDU 3416 Marriage Match IV(SPFA+最大流)
    asp.net一些很酷很实用的.Net技巧
    asp.net部分控件使用和开发技巧总结
    ASP_NET Global_asax详解
    asp.net 多字段模糊查询代码
    Asp.net中防止用户多次登录的方法
    SQL Server 事务、异常和游标
    有关Cookie
    asp.net 连接sql server 2005 用户 'sa' 登录失败。asp.net开发第一步连接的细节问题
    asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
  • 原文地址:https://www.cnblogs.com/messi2017/p/9900022.html
Copyright © 2011-2022 走看看