欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 312. Burst Balloons

发布时间:2025/6/17 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 LeetCode 312. Burst Balloons 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一看就是DP题,但是递推公式比较难想。为了简化问题,给 nums 开始和最后都加上1。

记 dp[i][j] 表示 nums[i~j] 能得到的最大coin。

k 表示保留着的气球,

dp[i][j] = max_k { dp[i][k-1] + nums[i-1] * nums[k] * nums[j+1] + dp[k+1][j] }  i<=k<=j

dp 需要从小到大构建,以 {1,1,2,3,1} 为例,dp[1][1], dp[2][2], dp[3][3], 然后再 dp[1][2], dp[2][3],最后dp[1][3]

类似从小到大构建的,常规方法是用一个变量l,然后枚举i,用i和l计算出j,最后枚举k。

class Solution { public:int maxCoins(vector<int>& nums) {int n=nums.size();nums.insert(nums.begin(),1);nums.push_back(1);// dp[i][j] - max coins from nums[i~j]vector<vector<int>> dp(n+2,vector<int>(n+2,0));for (int l=0;l<n;++l){for (int i=1;i<=n-l;++i){int j=i+l;for (int k=i;k<=j;++k){dp[i][j] = max(dp[i][j], dp[i][k-1] + nums[i-1]*nums[k]*nums[j+1] + dp[k+1][j]);}}}return dp[1][n];} };

 

转载于:https://www.cnblogs.com/hankunyan/p/11184515.html

总结

以上是生活随笔为你收集整理的LeetCode 312. Burst Balloons的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。