avatar
w*a
2
我理解的是,题目要求是running total,也就是两个人取数字的和超过一个数。
假设池子里还有三个数,1,2,3。要求达到的目标为5,两个玩家。
现在轮到玩家1取数字,如果贪心的取最大数字,则取3,total=3,那么玩家2随后取2
就能胜利。
如果玩家1不取3而是取1,total=1,玩家2无论从剩下的2和3里面取哪个数,他都必输。
avatar
l*a
3
明白了!非常感谢!!
avatar
s*n
4
如果可以重复选数字,那么如果 target % (maxChoosable + 1) == 0 那么玩家2必胜
,如果不是0那么玩家1第一步先拿到target % (maxChoosable + 1),然后对应玩家2拿
的数字来拿 maxChoosable + 1 - player2Num,最后就刚好抢到target。
如果不可以重复选数字,有一个初步的想法,可以把这个问题转化成一个有2^
maxChoosable 个节点的图,开始在sum = 0的节点上,玩家1和2轮流walk,走到某些节
点时候会获胜。比如1 2 3 4, target = 10,玩家2的winning state是 1 2 3 4,玩家
1没有所以玩家2必胜;如果target = 9 玩家2的winning state是1 2 3 4,玩家1是2 3
4,所以玩家2只要拿到1就胜了,也是必胜;如果target = 8 玩家1多了1 3 4是
winning state,这时玩家1只要取4然后玩家2无论怎么取都会输。
但是感觉这个code实现起来太麻烦了,坐等楼下大神给出答案。
avatar
l*a
5
嗯 同意你说的那个可选重复数字的那段。
不可选重复数字的我搜到了一个答案自己理解了下, 你看看?
http://blog.csdn.net/lsdtc1225/article/details/40342473

3

【在 s****n 的大作中提到】
: 如果可以重复选数字,那么如果 target % (maxChoosable + 1) == 0 那么玩家2必胜
: ,如果不是0那么玩家1第一步先拿到target % (maxChoosable + 1),然后对应玩家2拿
: 的数字来拿 maxChoosable + 1 - player2Num,最后就刚好抢到target。
: 如果不可以重复选数字,有一个初步的想法,可以把这个问题转化成一个有2^
: maxChoosable 个节点的图,开始在sum = 0的节点上,玩家1和2轮流walk,走到某些节
: 点时候会获胜。比如1 2 3 4, target = 10,玩家2的winning state是 1 2 3 4,玩家
: 1没有所以玩家2必胜;如果target = 9 玩家2的winning state是1 2 3 4,玩家1是2 3
: 4,所以玩家2只要拿到1就胜了,也是必胜;如果target = 8 玩家1多了1 3 4是
: winning state,这时玩家1只要取4然后玩家2无论怎么取都会输。
: 但是感觉这个code实现起来太麻烦了,坐等楼下大神给出答案。

avatar
w*a
6
不能重复选的话,naive的做法就是求全排列然后一个一个试,O(n!)。
不知道有没有啥剪枝的办法。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。