forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.cpp
23 lines (22 loc) · 842 Bytes
/
Solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
bool canIWin(int maxChoosableInteger, int desiredTotal) {
int s = (1 + maxChoosableInteger) * maxChoosableInteger / 2;
if (s < desiredTotal) return false;
unordered_map<int, bool> memo;
return dfs(0, 0, maxChoosableInteger, desiredTotal, memo);
}
bool dfs(int state, int t, int maxChoosableInteger, int desiredTotal, unordered_map<int, bool>& memo) {
if (memo.count(state)) return memo[state];
bool res = false;
for (int i = 1; i <= maxChoosableInteger; ++i) {
if ((state >> i) & 1) continue;
if (t + i >= desiredTotal || !dfs(state | 1 << i, t + i, maxChoosableInteger, desiredTotal, memo)) {
res = true;
break;
}
}
memo[state] = res;
return res;
}
};