-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1140.stone-game-ii.4.cpp
More file actions
30 lines (28 loc) · 874 Bytes
/
1140.stone-game-ii.4.cpp
File metadata and controls
30 lines (28 loc) · 874 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* @lc app=leetcode id=1140 lang=cpp
*
* [1140] Stone Game II
*/
// @lc code=start
class Solution {
int dp[101][32];
int dfs(const vector<int> &prefix, int pos, int m, int result = INT_MIN) {
if(pos + m * 2 > prefix.size()) return prefix.back() - (pos ? prefix[pos - 1] : 0);
if(dp[pos][m]) return dp[pos][m];
for(int i = pos; i < pos + m * 2; ++i) {
result = max(result, prefix[i] - (pos ? prefix[pos - 1] : 0) - dfs(prefix, i + 1, max(m, i - pos + 1)));
}
dp[pos][m] = result;
return result;
}
public:
int stoneGameII(vector<int>& piles) {
partial_sum(piles.begin(), piles.end(), piles.begin());
return (piles.back() + dfs(piles, 0, 1)) / 2;
}
};
// Accepted
// 92/92 cases passed (4 ms)
// Your runtime beats 99.55 % of cpp submissions
// Your memory usage beats 80.14 % of cpp submissions (8.4 MB)
// @lc code=end