【leetcode 1510 石子游戏】【记忆化搜索】

存在和对于一切的语言

import java.util.Arrays;

class Solution {
    public boolean winnerSquareGame(int n) {
        dp = new Boolean[n + 1];
        dp2 = new Boolean[n + 1];

        Arrays.fill(dp, null);
        Arrays.fill(dp2, null);

        dp[0] = false;
        dp2[0] = true;

        return dfs(n, true);
    }

    // dp[i] 表示以i为状态的Alice开始操作的结果
    Boolean[] dp;
    // dp2[i] 表示以i为状态的Bob开始操作的alice的结果
    Boolean[] dp2;

    public static void main(String[] args) {
        Solution solution = new Solution();
        boolean flag = solution.winnerSquareGame(2);
        System.out.println(flag);
    }


    public boolean dfs(int n, boolean isAlice) {
        if (isAlice) {
            if (dp[n] != null) {
                return dp[n];
            }
            // n 没有visited;判存在
            // 存在一个i dfs(n, true) 为true
            boolean flag = false;
            for (int i = 1; i * i <= n && !flag; i++) {
                // alice 拿了i*i后的结果
                flag = flag | dfs(n - i * i, false);
            }
            dp[n] = flag;
            return flag;
        } else {
            if (dp2[n] != null) {
                return dp2[n];
            }
            // flag 表示alice赢的结果
            boolean flag = true;
            for (int i = 1; i * i <= n && flag; i++) {
                // bob 拿了i*i后的结果
                flag = flag & dfs(n - i * i, true);
            }
            dp2[n] = flag;
            return flag;
        }
    }
}

本文作者:love

本文链接:https://www.cnblogs.com/fishcanfly/p/18238901

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   fishcanfly  阅读(7)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起