16-ms DP c++ solution, beating 96% others.
int maxCoins(vector<int>& nums) {\n            int num[nums.size()+2];\n            int n = 1;\n            for(int x : nums)  num[n++] = x;\n            num[0]
    int maxCoins(vector<int>& nums) {\n            int num[nums.size()+2];\n            int n = 1;\n            for(int x : nums)  num[n++] = x;\n            num[0] = num[n++] = 1;\n            int dp[n][n] = {};   // dp[i][j] means the maxScore we can reach by bursting all the balloons between (i,j)\n            for(int k = 2; k < n; k++){\n                for(int left = 0; left + k < n; left++){\n                    int right = left + k;\n                    for(int i = left+1; i < right; i++){\n                        dp[left][right] = max(dp[left][right], dp[left][i] + dp[i][right] + num[left]*num[right]*num[i]);\n                    }\n                }\n            }\n            return dp[0][n-1];\n        }
['Dynamic Programming']