312 Burst Balloons

来源:互联网 发布:淘宝流量和访客的区别 编辑:程序博客网 时间:2024/04/30 07:35

动态规划:dp[i][j]表示气球i到气球j的最佳coins
动态转移方程:
dp[i][j]=max(dp[i][k-1]+nums[i-1]*nums[k]*nums[j+1]+dp[k+1][j]) k∈[i,j]

class Solution {public:    int maxCoins(vector<int>& nums) {        for(int i=0;i<nums.size();++i){            if(nums[i]==0){                nums.erase(nums.begin()+i);                --i;            }        }        int n=nums.size();        if(n==0) return 0;        //if(n==1) return nums[0];        //if(n==2) return nums[0]*nums[1]+max(nums[0],nums[1]);        nums.insert(nums.begin(),1);        nums.insert(nums.end(),1);        int m=nums.size();        vector<vector<int>> dp(m,vector<int>(m,0));        for(int count=1;count<=n;++count){            for(int start=1;start+count-1<=n;++start){                int bestcoins=0;                for(int b=0;b<count;++b){                    bestcoins=max(bestcoins,dp[start][start+b-1]+nums[start-1]*nums[start+b]*nums[start+count]+dp[start+b+1][start+count-1]);                }                dp[start][start+count-1]=bestcoins;            }        }        return dp[1][n];    }};
0 0
原创粉丝点击