LeetCode 312. Burst Balloons
生活随笔
收集整理的这篇文章主要介绍了
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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SSH port forwarding:
- 下一篇: 没有热情会走多远