戳气球
class Solution {
public:
void find_max(vector<vector<int>> &dp,int left,int right,vector<int>& nums){
int m=0;
for(int k=left+1;k<right;k++){
int temp_left=dp[left][k];
int temp_right=dp[k][right];
int a=temp_left+nums[left]*nums[k]*nums[right]+temp_right;
if(a>m){
m=a;
}
}
dp[left][right]=m;
}
int maxCoins(vector<int>& nums) {
nums.insert(nums.begin(),1);
nums.insert(nums.end(),1);
vector<vector<int>> dp(nums.size(),vector<int>(nums.size(),0));
for(int i=2;i<nums.size();i++){
for(int j=0;j<nums.size()-i;j++){
find_max(dp,j,j+i,nums);
}
}
return dp[0][nums.size()-1];
}
};
