-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBurst Balloons
49 lines (47 loc) · 1.33 KB
/
Burst Balloons
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//memoization
class Solution {
public:
int func(int i, int j, vector<int> &nums,vector<vector<int>> &dp){
if(i>j)
return 0;
if(dp[i][j]!=-1){
return dp[i][j];
}
int maxx=0;
for(int ind=i; ind<=j; ind++){
int cost = nums[i-1]*nums[ind]*nums[j+1]+func(i, ind-1, nums,dp)+func(ind+1, j, nums,dp);
maxx = max(cost, maxx);
}
return dp[i][j]=maxx;
}
int maxCoins(vector<int>& nums) {
int n=nums.size();
nums.push_back(1);
nums.insert(nums.begin(), 1);
vector<vector<int>> dp(n+1,vector<int>(n+1,-1));
return func(1,n,nums,dp);
}
};
//dp
class Solution {
public:
int maxCoins(vector<int>& nums) {
int n=nums.size();
nums.push_back(1);
nums.insert(nums.begin(), 1);
vector<vector<int>> dp(n+2, vector<int> (n+1, 0));
for(int i=n; i>=1; i--){
for(int j=1; j<=n; j++){
if(i>j)
continue;
int maxx=0;
for(int ind=i; ind<=j; ind++){
int cost = nums[i-1]*nums[ind]*nums[j+1]+dp[i][ind-1]+dp[ind+1][j];
maxx = max(cost, maxx);
}
dp[i][j] = maxx;
}
}
return dp[1][n];
}
};