1025. Divisor Game

1025. Divisor Game

bool divisorGame(int N, bool res=false) {
    if (dp[N] != 0) return dp[N]==1;    // 返回已经求过的解

    for(int i=1;!res && i<N;++i) { // 当前方案不能赢且可以继续搜索
        if (N % i == 0) res = !divisorGame(N-i);    // 选完轮到对方,如果对方成功,那么自己就失败
    }

    dp[N] = res? 1 : -1;    // 不是自己赢就是对方赢
    return res;
}

int dp[1001] = {0};

#博弈 #DP