var canIWin = function (maxChoosableInteger, desiredTotal) {
if (maxChoosableInteger >= desiredTotal) return true;
var sum = (maxChoosableInteger * (maxChoosableInteger + 1)) / 2;
if (desiredTotal > sum) return false;
* @param {number} total 剩余的数量
* @param {number} state 使用二进制位表示抽过的状态
function f(total, state) {
if (dp[state] !== undefined) return dp[state];
for (var i = 1; i <= maxChoosableInteger; i++) {
if (curr & state) continue;
if (i >= total) return (dp[state] = true);
if (!f(total - i, state | curr)) return (dp[state] = true);
return (dp[state] = false);
return f(desiredTotal, 0);