LeetCode 五月打卡-day22

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day22相关的知识,希望对你有一定的参考价值。

464. 我能赢吗

参考题解:
【负雪明烛】图解算法:递归,步步优化,弄清每个细节
【宫水三叶】博弈论 DP 运用题

class Solution 
    int n, t;
    int[][] f = new int[1 << 20][2];
    // 1 true / -1 false
    int dfs(int state, int tot, int k) 
        if (state == ((1 << n) - 1) && tot < t) return -1;
        if (f[state][k % 2] != 0) return f[state][k % 2];
        int hope = k % 2 == 0 ? 1 : -1;
        for (int i = 0; i < n; i++) 
            if (((state >> i) & 1) == 1) continue;
            if (tot + i + 1 >= t) return f[state][k % 2] = hope;
            if (dfs(state | (1 << i), tot + i + 1, k + 1) == hope) return f[state][k % 2] = hope;
        
        return f[state][k % 2] = -hope;
    
    public boolean canIWin(int _n, int _t) 
        n = _n; t = _t;
        if (t == 0) return true;
        return dfs(0, 0, 0) == 1;
    

以上是关于LeetCode 五月打卡-day22的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day01

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day20

LeetCode 五月打卡-day08

LeetCode 五月打卡-day13