亲宝软件园·资讯

展开

Leetcode_877. 石子游戏(区间dp)

Keane1998 人气:0

偶数堆石子,只能从首尾取,取多的赢。
每次操作会产生两个子状态,区间dp,记得先枚举长度。

code

class Solution {
public:
    int dp[505][505];
    bool stoneGame(vector<int>& piles) {
        int n=piles.size();
        int sum=0;
        for(int i=0;i<n;i++){
            sum+=piles[i];
        }
        for(int i=0;i<n;i++){
            dp[i][i]=piles[i];
        }
        for(int k=2;k<=n;k++){
            for(int i=0;i+k-1<n;i++){
                int j=i+k-1;
                int a=piles[i]+dp[i+1][j];
                int b=piles[j]+dp[i][j-1];
                dp[i][j]=max(a,b);
            }
        }
        if(sum-dp[0][n-1]<sum){
            return true;
        }else{
            return false;
        }
    }
};

加载全部内容

相关教程
猜你喜欢
用户评论