«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1407031
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]野人,修道士过河问题
既瑜(224499) 发表于 2005/3/16 17:06:17

 [野人,修道士过河问题] 有一条河分割两岸,开始时左岸有m个野人,n个修道士 (m≤n)要过河 但是只有一条船,船上可坐c个人。在船上或在某边的岸上如果野人的数目大于修 道士的数目野人 就会吃掉修道士。要求给出一种对修道士安全的过河方案。 设有m个野人,n个修道士,(m≤n)船上可坐c个人。 1. c=1,无解; 2. c=2,对较小的M,N有解,对于较大的M,N无解,比如m=n=4,c=2无解; 3. c=3,情况同上; 4. c>3,分情况讨论如下: (1) m=n, 此时可以按照下面的方案设计(下面S表示野人savage,R表示修道士religious, B表示船boat, ||表示 河) 方案一: m S ||      (m-c)S || cS        (m-c+1) S  || (c-1) S      (m-c+1)S || (c-1)S       (m-c+2)S || (c-2)S m R ||  =>     m R ||       =>        m R  ||          =>  (m-c+1)R || (c-1)R   =>  (m-c+2)R || (c-2)R B   ||             ||  B                B  ||                       ||      B              B || 于是又回到了开始时候的情况,两岸的S,R相等且船在左岸,已经有c-2个S和c-2个 R过了河。依次做下去 ,最终所有的人都会过河; 还有一种方案: 方案二: mS ||     (m-[c/2])S || [c/2]S       (m-[c/2]+1)S || ([c/2]-1)S mR ||  => (m-[c/2])R || [c/2]R   =>  (m-[c/2]+1)R || ([c/2]-1)R B ||                ||      B                  B || 最终也会到两岸S,R相等而船在左岸的情况,有[c/2]-1个S和R过了河。 当c为偶数时,方案一和方案二的过河速度是一样的;当c为奇数时,方案一要比 方案二快。 当m=n时,一些特例需要考虑: a. k≥m+n,让所有人一次全部过河; b. k≥m, 用上面的方案一; (2)n>m时, ①n=m+1,又分以下两种情况: (a) c为偶数,方案如下: 方案三: mS ||       (m-c)S || cS         (m-c+1)S || (c-1)S         (m-c+1)S || (c-1)S        (m- c+1)S || (c-1)S nR ||   =>      nR ||       =>         nR ||           =>     (n-c)R ||     cR    =>  (n- c+1)R || (c-1)R B ||              ||  B                B ||                         ||      B               B || 令m'=m-c+1,n'=n-c+1,则又重复了n'=m'+1的情况; (b) c为奇数,设c=2h+1,显然a的方案三也可用,另外还有以下方案: 方案四 mS ||        (m-h)S ||     hS         (m-h)S || hS nR ||   => (n-h-1)R || (h+1)R      => (n-h)R || hR B ||               ||      B              B ||    令m'=m-h,n'=n-h,又回到了n'=m'+1的情况。按照这个方案每次h个S和h+1个R过河 ,然后1个R回来。 当c为奇数的时候a,b两种方案的过河速度一样。 ②n≥m+2时: (a) c为奇数时,可以用n=m+1的情况b的方案四。 (b) c为偶数时,设c=2h,可以每单次过h-1个S,h+1个R,然后回来一个R,每双次 过h个S,h个R,回来一 个R.具体如下所示: 方案五: mS ||      (m-h+1)S || (h-1)S         (m-h+1)S || (h-1)S         (m-2h+1)S || (2h-1)S       (m-2h+1)S || (2h-1)S nR ||   => (n-h-1)R || (h+1)R      =>   (n-h)R ||     hR    =>     (n-2h)R ||     2hR    => (n-2h+1)R || (2h-1)R B ||               ||      B                B ||                          ||       B               B || 令m'=m-2h+1, n'=n-2h+1,重复上述过程。 算法设计的总思路是每次过河的人尽可能地多,回来的人尽可能地少,当n>m,c≥ 2的时候总是有解。 上述的算法已经说的很清楚了,程序你应该可以自己写出来吧。 这个问题是NOI复赛考过的题目,题目不难,但是要注意讨论全面。

阅读全文(2102) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.223 second(s), page refreshed 144777320 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号