#include<bits/stdc++.h>
int burstBalloons(vector<int> &arr){
// Write your code here.
arr.push_back(1);
arr.insert(arr.begin(), 1);
int n= arr.size();
vector<vector<int>> dp(n, vector<int> (n, 0));
for(int i = n-2; i>=1; i--){
for(int j = i; j<=n-2; j++){
int maxi = INT_MIN;
for(int k = i ; k <= j ; k++){
int cost = arr[i-1]*arr[k]*arr[j+1] + dp[i][k-1]+ dp[k+1][j];
maxi = max(maxi, cost);
}
dp[i][j] = maxi;
}
}
return dp[1][n-2];
}
// int f(int i, int j, vector<int> &arr,vector<vector<int>> &dp){
// if(i> j) return 0;
// if( dp[i][j] != -1) return dp[i][j];
// int maxi = INT_MIN;
// for(int k = i ; k <= j ; k++){
// int cost = arr[i-1]*arr[k]*arr[j+1] + f(i,k-1,arr,dp)+ f(k+1, j ,arr,dp);
// maxi = max(maxi, cost);
// }
// return dp[i][j] = maxi;
// }
// int burstBalloons(vector<int> &arr){
// // Write your code here.
// arr.push_back(1);
// arr.insert(arr.begin(), 1);
// int n= arr.size();
// vector<vector<int>> dp(n, vector<int> (n, -1));
// return f(1, n-2,arr,dp);
// }