艾恩凝
个人博客 https://aeneag.xyz/
公众号 技术乱舞
2021/10/14
题目
https://leetcode-cn.com/problems/burst-balloons/
分析
这个题目真的难搞哦,动态规划,yyds,首先把这个数组加上收尾,要计算在当前开区间0到n+1最大硬币,子问题就是在某个区间最大的硬币
题解
代码虽短,贵在理解
class Solution {
public:
int maxCoins(vector<int>& nums) {
int len = nums.size();
if(!len)return 0;
vector<int> arr(len+2,1);
vector<vector<int>> dp(len+2,vector<int>(len+2));
for(int i = 1 ; i <= len ; ++i)arr[i] = nums[i-1];
for(int i = len - 1 ; i >= 0 ; i--){
for (int j = i + 2 ; j <= len + 1 ; j++){
for(int k = i + 1 ; k < j ; k++){
int sum = arr[i] * arr[k] * arr[j];
sum += dp[i][k] + dp[k][j];
dp[i][j] = max(dp[i][j],sum);
}
}
}
return dp[0][len+1];
}
};
欢迎关注 #公众号:技术乱舞 一起交流
灵魂碰撞