1025. 除数博弈

在这里插入图片描述
在这里插入图片描述
解题思路:
如果我们想要知道当数字N时爱丽丝赢,就要看N-x时的情况,当N-x爱丽丝赢时,则N时爱丽丝输(相当于N时爱丽丝选X,由于N-x是鲍勃先手选所以必赢),反之,当N-x时爱丽丝输,则N时爱丽丝必赢。(因为鲍勃,爱丽丝都是最佳状态)

由于我们知道2爱丽丝赢,3爱丽丝输,则我们就可以由2.3推N-x,N,即状态转移方程:(初始化dp数组为false)

if(N % x == 0 && dp[N-x] == false){
	dp[N] = true;
	break;//(由于鲍勃,爱丽丝都时最佳状态,只要有一个满足条件必选)
}

其实1是2~N每个数的公约数,按照上面的思路,设x=1即可, 如果dp[2]=true,那么即[N-x]=true,可得N=3,所以dp[N]=false;
交替出现true,false,所以可以简洁解法:

class Solution {
public:
    bool divisorGame(int N) {

        return N%2==0?true:false;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值