您的位置:首页 > 其它

数字游戏

2014-03-04 19:38 155 查看
题目描述:

         CHRISTIANE和MATTHIAS正在玩一个新游戏---数字游戏,游戏规则是:CHRISTIANE和MATTHIAS轮流选择大于或等于2的正整数,所选择的整数必须满足下列规则:

     1.一个整数被一个玩者选择后,那么这个整数及它的倍数不能被(以后的任何玩者)选择

     2.已被选择的任何2个整数或这两个整数的倍数之和不能被(以后的任何玩者)选择

     3.为了简化题目,要求玩者所选择的整数不大于20

第1个没有整数选择的玩者就是失败者,而另一个玩者就是赢家。

现在的问题是:给定一个游戏状态(一些可以选择的整数表),请你编程求出所有使你必胜的选择,所谓必胜的选择是指:在给定游戏状态之后,你从中选择一个整数,以后不管另一个玩者怎么选择,最终的赢家是你。没有必胜策略输出0。

解题思路:

         题目用搜索解决。用二进制串描述状态:第i位表示第i个数是否被选过。这样状态总数就有219=524288种,可以用hash表储存状态(对于每一个状态要不必胜,要不必败,于是状态只需要保存到是否拓展到了胜败)。最坏的时候,搜索树将包括每一种情况,似乎没有方法解决。

枚举每一个可选的数,将它加入已选数的集合,这样就得到了下一个状态。于是,我们只要花最多202的时间(其实远小于202)就可以从一个状态转移到下一个状态,最坏的情况下只要小于219*202*8(乘以8是因为用到了8位一压的技术)的复杂度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 ACM