https://leetcode-cn.com/problems/burst-balloons/
思路:設表示戳破區間的所有氣球所能獲得的最大硬幣數。爲了方便處理,我們在數組開頭和結尾各放入一個,設數組原來有個元素,顯然答案爲。那麼對於區間,我們需要枚舉所有的劃分方案,設中斷點爲,則有:的取值範圍爲。所以複雜度爲。
class Solution {
public:
int dp[505][505];
int maxCoins(vector<int>& nums) {
int n=nums.size();
nums.insert(nums.begin(),1);
nums.push_back(1);
for(int i=1;i<=n;i++)
dp[i][i]=nums[i-1]*nums[i]*nums[i+1];
for(int len=2;len<=n;len++)
{
for(int i=1;i+len-1<=n;i++)
{
int j=i+len-1;
for(int k=i;k<=j;k++)
dp[i][j]=max(dp[i][j],dp[i][k-1]+dp[k+1][j]+nums[i-1]*nums[k]*nums[j+1]);
}
}
return dp[1][n];
}
};