forked from kamyu104/LeetCode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstone-game-vii.cpp
More file actions
23 lines (22 loc) · 744 Bytes
/
stone-game-vii.cpp
File metadata and controls
23 lines (22 loc) · 744 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Time: O(n^2)
// Space: O(n)
class Solution {
public:
int stoneGameVII(vector<int>& stones) {
vector<int> prefix(1);
for (const auto& stone : stones) {
prefix.emplace_back(prefix.back() + stone);
}
const auto& score = [&prefix](int i, int j) {
return prefix[j + 1] - prefix[i];
};
vector<vector<int>> dp(2, vector<int>(size(stones)));
for (int i = size(stones) - 1; i >= 0; --i) {
for (int j = i + 1; j < size(stones); ++j) {
dp[i % 2][j] = max(score(i + 1, j) - dp[(i + 1) % 2][j],
score(i, j - 1) - dp[i % 2][j - 1]);
}
}
return dp[0][size(stones) - 1];
}
};