312. 戳气球

Posted yuhong1103

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了312. 戳气球相关的知识,希望对你有一定的参考价值。

 1 //dp[i][j] = x表示,戳破气球i和气球j之间(开区间,不包括i和j)的所有气球,可以获得的最高分数为x
 2 //根据刚才对dp数组的定义,如果最后一个戳破气球k,dp[i][j]的值应该为:
 3 // dp[i][j] = dp[i][k] + dp[k][j] 
 4 //          + points[i]*points[k]*points[j]
 5 class Solution 
 6 {
 7 public:
 8     int maxCoins(vector<int>& nums) 
 9     {
10         int n = nums.size();
11         // 添加两侧的虚拟气球
12         vector<int> points(n + 2);
13         points[0] = points[n + 1] = 1;
14         for (int i = 1; i <= n; i++) points[i] = nums[i - 1];
15         
16         // base case 已经都被初始化为 0
17         vector<vector<int>> dp(n + 2,vector<int>(n + 2));
18 
19         // 开始状态转移
20         // i 应该从下往上
21         for (int i = n; i >= 0; i--) 
22         {
23             // j 应该从左往右
24             for (int j = i + 1; j < n + 2; j++) 
25             {
26                 // 最后戳破的气球是哪个?
27                 for (int k = i + 1; k < j; k++) 
28                 {
29                     // 择优做选择
30                     dp[i][j] = max(
31                         dp[i][j], 
32                         dp[i][k] + dp[k][j] + points[i]*points[j]*points[k]
33                     );
34                 }
35             }
36         }
37         return dp[0][n + 1];
38     }
39 };

 

以上是关于312. 戳气球的主要内容,如果未能解决你的问题,请参考以下文章

312. 戳气球. dp

312. 戳气球

312. 戳气球

312. 戳气球

312 Burst Balloons 戳气球

312. 戳气球困难区间DP