diff --git a/Recursion/1140.Stone-Game-II/1140.Stone-Game-II.cpp b/Recursion/1140.Stone-Game-II/1140.Stone-Game-II.cpp index 19d3fea5d..0fd95d70d 100644 --- a/Recursion/1140.Stone-Game-II/1140.Stone-Game-II.cpp +++ b/Recursion/1140.Stone-Game-II/1140.Stone-Game-II.cpp @@ -1,28 +1,30 @@ class Solution { - int dp[101][101]; - int sufsum[101]; + int dp[101][101]; + int suf[101]; + public: int stoneGameII(vector& piles) { int n = piles.size(); - for (int i=0; i<=100; i++) - for (int j=0; j<=100; j++) - dp[i][j] = 0; - sufsum[n] = 0; + suf[n] = 0; for (int i=n-1; i>=0; i--) - sufsum[i] = sufsum[i+1]+piles[i]; + suf[i] = suf[i+1]+piles[i]; + return solve(0, 1, piles); } - + int solve(int i, int M, vector& piles) { if (i==piles.size()) return 0; - if (dp[i][M]!=0) return dp[i][M]; - + if (dp[i][M]!=0) + return dp[i][M]; + + int sum = 0; for (int x=1; x<=2*m; x++) { - if (i+x>piles.size()) break; - dp[i][M] = max(dp[i][M], sufsum[i] - solve(i+x, max(x,M), piles)); + if (i+x-1>=piles.size()) break; + sum += piles[i+x-1]; + dp[i][M] = max(dp[i][M], sum + suf[i+x] - solve(i+x, max(x,M), piles)); } return dp[i][M]; }

AltStyle によって変換されたページ (->オリジナル) /