USACO算法系列——讨论篇

    这道题目来自于我同学的口述,大意是这样,有N个房间,编号为1,2,3……N,里面有1个宠物,然后你每次只能打开一个房间,如果没有找到,宠物必须随机向左向右移动一次,问你如何以最快的开门方式找到宠物。

   eg,有3个房间,那么你只要至多打开中间的房间两次就可以找到宠物了。

   分析:用N个位来表示N个房间,0:代表有宠物,1:代表没有宠物。则当N=3时,宠物的初始状态可能为

   1)100

   2)010

   3)001

   你打开第二个房间一次,如果没有找到宠物,剩下两种状态,100,001,宠物移动,只剩下状态010,因此只需要再次打开房间2就可以找到宠物了。

   当N=4时,初始状态为1000 0100 0010 0001。打开房间2,可以删除第二种可能性,剩下1000 0010 0001三种状态,宠物移动得到新的状态为0100 0010 0001。此时如果打开房间2,剩下0010 0001两种状态,宠物移动以后,仍然有0100 0010 0001三种状态。进入死循环状态,所以应该打开房间三,此时宠物移动以后状态为1000 0010,然后接着打开房间3,状态仅剩下0100,宠物一定在第二个房间。共需4次。

   当N=5时,使用同样方法,依次打开2,3,4,4,3,2房间就可以找到宠物了。共需六次。

   因此,至多只需要2*(N-2)次就可以找到宠物了,方式为依次打开2,3,4……N-1,N-1,N-2,……3,2房间。

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值