• LeetCode 1025. Divisor Game


    题目链接:https://leetcode.com/problems/divisor-game/

    题意:Alice和Bob玩一个游戏,Alice先开始。最初,黑板上有一个数字N。每一轮,选手首先需要选择一个数x(0<x<N且N%x==0),并将黑板上的数字N替换成N-x。如果哪个选手无法继续操作,则意味着输掉了游戏。如果Alice赢了返回true。

    分析:

    (1)先从最简单的case入手。N=1,Alice必败;N=2,Alice只能选择1,则Bob必败,Alice必胜;N=3,Alice只能选择1,则Bob必胜,Alice必败;N=4,Alice可以选择1,也可以选择2,Alice选择1,则Bob必败Alice必胜,Alice选择2,则Bob必胜Alice必败,因此,Alice一定会选择1,因此Alice胜。

    (2)由此可推出结论,当Alice面对数字N时,她所需要选择的数字x必须使得Bob在处理N-x时必败,她才可能获胜。因此,如果Alice所有可以选择的x都使得Bob在处理N-x时必胜,那么Alice必败;只要Alice所有可以选择的x中有一种情况能使Bob在处理N-x时必败,那Alice都是必胜的。

    class Solution {
    public:
        bool divisorGame(int N) {
            int dp[1010];
            dp[1] = 0;
            for(int i = 2; i <= N; ++i){
                dp[i] = 0;
                for(int j = 1; j < i; ++j){
                    if(i % j == 0){
                        if(dp[i - j] == 0){
                            dp[i] = 1;
                            break;
                        }
                    }
                }
            }
            if(dp[N]) return true;
            return false;
        }
    };
    

      

  • 相关阅读:
    取最小未用的账号
    Oracle 同义词
    RMAN备份报 RMAN-06059 错误
    Oracle11g memory_target
    基础记录
    uboot启动流程
    android有关生命周期探讨
    can协议
    java虚拟机
    内存管理机制
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12084221.html
Copyright © 2020-2023  润新知