#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
class Solution {
public:
int maxCoins(vector<int>& nums) {
int n=nums.size();
int arr[n+2];
arr[0]=1;
arr[n+1]=1;
for(int i=1;i<=n;i++)arr[i]=nums[i-1];
int dp[n+2][n+2];//定义dp[l][r]为考虑将(l,r)范围内(不包含 l 和 r 边界)的气球消耗掉,所能取得的最大价值。
memset(dp,0,sizeof(dp));
for(int len=3;len<=n+2;len++){//先枚举区间长度len,然后枚举区间左端点 l(同时直接算得区间右端点 r)
for(int l=0;l<=n+2-len;l++){
int r=l+len-1;
for(int k=l+1;k<=r-1;k++){
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+arr[l]*arr[k]*arr[r]);
}
}
}
return dp[0][n+1];
}
};
LeetCode312 戳气球
最新推荐文章于 2024-07-13 13:36:16 发布