-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1140.cpp
More file actions
35 lines (33 loc) · 832 Bytes
/
Copy path1140.cpp
File metadata and controls
35 lines (33 loc) · 832 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
#include "common.h"
class Solution {
public:
int stoneGameII(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(), vector<int>(piles.size()));
return func(piles, 0, 1);
}
int func(vector<int>& piles, int s, int m) {
int max = m * 2;
int n = piles.size();
if (s + max >= n) {
return sum[n] - sum[s];
}
if (dp[s][m]) return dp[s][m];
int num = 0;
for (auto i = 1; i <= max; ++i) {
num = std::max(sum[n] - sum[s] - func(piles, s + i, std::max(m, i)), num);
}
return dp[s][m] = num;
}
vector<int> sum;
vector<vector<int>> dp;
};
int main() {
Solution s;
vector<int> v = {2, 7, 9, 4, 4};
cout << s.stoneGameII(v) << endl;
}