leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
0464.cpp (757B)
0 class Solution {
1 static int8_t dp[1 << 20];
3 int rec(int maxi, int tgt, int k) {
4 if (dp[k] != 0) return dp[k] > 0;
5 if (tgt <= 0) return false;
7 for (int i = 1, mask = 1; i <= maxi; mask <<= 1, i++) {
8 if (k & mask) continue;
9 if (rec(maxi, tgt - i, k | mask)) continue;
10 dp[k] = 1;
11 return true;
12 }
14 dp[k] = -1;
15 return false;
16 }
18 public:
19 bool canIWin(int maxi, int tgt) {
20 if (tgt <= maxi) return true;
22 const int sum = maxi * (maxi + 1) / 2;
23 if (sum < tgt) return false;
24 if (sum == tgt) return maxi % 2;
26 memset(dp, 0x00, sizeof(dp));
27 return rec(maxi, tgt, 0);
28 }
29 };
31 int8_t Solution::dp[1 << 20];