4
public boolean canIWin(int maxChoosableInteger, int desiredTotal) {5
numlimit = maxChoosableInteger;8
int maxsum = (numlimit * (numlimit + 1)) / 2;9
if (maxsum < tgt) return false;11
int dp[] = new int[(1 << numlimit)];12
if (solve(0, 0, 0, dp)) {18
public boolean solve(int mask, int lstsum, int player, int dp[]) {20
if (dp[mask] != 0) return (dp[mask] == 1);22
for (int i = 0; i < numlimit; i++) {23
if ((mask & (1 << i)) == 0) {24
if ((lstsum + (i + 1) >= tgt)25
|| !solve((mask | (1 << i)), lstsum + (i + 1), player + 1, dp)) {