机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4349|回复: 6
打印 上一主题 下一主题

饭后消化(算法)

  [复制链接]
跳转到指定楼层
楼主
发表于 2011-10-9 12:58:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有A,B两堆石子,分别为m,n个。有以下两种方法取石子:
(1)可以从任意一堆取出任意多的石子;
(2)可以从两堆中取出同样多的石子;
规则:每人一次,交替进行,最后一个取完所有石子的人胜出;
(例:若m=2,n=1,按照以上方法谁先取,谁必输。)
现在要求由你先开始,编程实现输赢情况
Input:
1   2
1   3
2   4
Output:(0是输,1是赢)
0
1
1

这个估计O(N)的复杂度都不够,最好能推出公式来
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2011-10-9 14:09:37 | 只看该作者
这些很像ACM题啊,完全模式一样,呵呵
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2011-10-9 14:44:31 | 只看该作者
hsc 发表于 2011-10-9 14:09
这些很像ACM题啊,完全模式一样,呵呵

应该确实是吧..在一个group里看到的
回复 支持 反对

使用道具 举报

地板
发表于 2011-10-9 14:57:09 | 只看该作者
设两堆石头分别是m和n,m>=n
if n=0, 输出1 (1把取完)
if m=n,输出1 (1把取完)
if m=2,n=1 输出0
else if m-n=1, 输出1,(1把取成m=2,n=1)
if n=1,m>2 输出1,(1把取成m=2,n=1)
if n=2,m>2 输出1,(1把取成m=1,n=2)
if n=3,m=5 输出0 ,(怎么取都把机会留给对方)
if n=3,m>5 输出1,(1把取成m=5,n=3)
if m-n=2, n>3 输出1,(1把取成m=5,n=3)
if n=4,m=7 输出0

得出规律
n   m   输出  差
1   2   0       1
3   5   0       2
4   7   0       3
5   9   0       4
当n>2时,如果m=2n-1则输出0,其余都输出1
可用数学归纳法证明,并得出解法。

别做这高中数学题,耽误时间,呵呵,有时间读读paper:)   
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2011-10-9 15:56:36 | 只看该作者
zouquan 发表于 2011-10-9 14:57
设两堆石头分别是m和n,m>=n
if n=0, 输出1 (1把取完)
if m=n,输出1 (1把取完)

= =!这个不算高中题吧..饭后消化玩玩
这个算法是有问题的比如5,9,输出是1,比如我从11里取6个,对方就是必输策略了,对我就是必胜了,输出该为1.这个是因为5在上一个必败策略中出现过了,是3,5,。所以下一个必败策略不能出现5
回复 支持 反对

使用道具 举报

6#
发表于 2011-10-9 16:52:20 | 只看该作者
哈哈,有意思,我没考虑到,不过我没时间想了~~
回复 支持 反对

使用道具 举报

7#
发表于 2011-10-13 14:25:21 | 只看该作者
尼姆博弈理论,经典取石子游戏啊。
可惜每一次学会后又忘记了,汗!~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-5-19 12:22 , Processed in 0.066486 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表