-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1406.cpp
More file actions
41 lines (39 loc) · 895 Bytes
/
Copy path1406.cpp
File metadata and controls
41 lines (39 loc) · 895 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
31
32
33
34
35
36
37
38
39
40
41
#include "common.h"
class Solution {
public:
string stoneGameIII(vector<int>& piles) {
sum.resize(piles.size() + 1);
sum[0] = 0;
for (auto i = 1; i <= piles.size(); ++i) {
sum[i] = sum[i - 1] + piles[i - 1];
}
dp.resize(piles.size(), -1);
int alice = func(piles, 0);
int bob = sum.back() - alice;
if (alice > bob) {
return "Alice";
} else if (alice < bob) {
return "Bob";
}
return "Tie";
}
int func(vector<int>& piles, int s) {
int n = piles.size();
if (s >= n) {
return 0;
}
if (dp[s] != -1) return dp[s];
int num = INT_MIN;
for (auto i = 1; i <= 3; ++i) {
num = std::max(sum[n] - sum[s] - func(piles, s + i), num);
}
return dp[s] = num;
}
vector<int> sum;
vector<int> dp;
};
int main() {
Solution s;
vector<int> v = {-1, -2, -3};
cout << s.stoneGameIII(v) << endl;
}