题目
三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自已划行,随从们密约,在河的任一岸,一旦随从的人数比商人多就杀人越货。但是如果乘船渡河的大权掌握在商人们手中,商人们怎样才能安全渡河呢?又若四名商人各带一个随从过河,商人如何才能安全渡河?一般地,有 n n n名商人带 n n n个随从过河,船每次能渡 k k k人过河,试讨论商人能安全过河时, n n n与 k k k应满足什么条件?
模型假设
- 小船总能正常工作,且过河过程中不会出现意外情况;
- 随从总是听从商人的安排;
- 小船返回时,必须有至少一人操作。
模型建立
设 S i = { a , b } S_i = \{a,b\} Si={
a,b}为执行第 k k k次决策后出发岸的状态,其中 a , b a,b a,b分别表示商人和随从的人数, 0 ≤ a ≤ n , 0 ≤ b ≤ n 0\leq a\leq n, 0\leq b\leq n 0≤a≤n,0≤b≤n。容易知道在执行第 i i i次决策后,目的岸的状态为 S i ′ = { n − a , n − b } , S 0 ′ = { 0 , 0 } S'_i = \{n-a, n-b\},S'_0 = \{0,0\} Si′={
n−a,n−b},S0′={
0,0}。则对状态的约束为
{ a ≥ b n − a ≥ n − b (1) \left\{\begin{aligned} a &\geq b \\ n-a &\geq n-b \end{aligned}\right. \tag{1} {
an−a≥b≥n−b(1)
或
{ S i = { n , b } ∣ b = 1 , 2 , 3 } ∪ { S i = { 0 , b } ∣ b = 1 , 2 , 3 } (2) \{S_i=\{n,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{0,b\}\ |\ b = 1,2,3\} \tag{2} {
Si={
n,b} ∣ b=1,2,3}∪{
Si={
0,b} ∣ b=1,2,3}(2)
(1)式表示在任意岸边,商人数量必须大于随从数量,解得 { S i = { a , b } ∣ a = b } \{S_i=\{a,b\}\ |\ a=b\} {
Si={
a,b} ∣ a=b}。(2)式表明某一岸上只有随从而没有商人,随从无法越货。因此所有允许的状态集为
S = { S i = { n , b } ∣ b = 1 , 2 , 3 } ∪ { S i = { 0 , b } ∣ b = 1 , 2 , 3 } ∪ { S i = { a , b } ∣ a = b } (3) \mathscr{S} = \{S_i=\{n,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{0,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{a,b\}\ |\ a=b\} \tag{3} S={
Si={
n,b} ∣ b=1,2,3}∪{
Si={
0,b} ∣ b=1,2,3}∪{
Si={
a,b} ∣ a=b}(3)
特别地,初始时状态 S 0 = { n , n } S_0 = \{n, n\} S0={
n,n},所有人过河完成的终止状态为 S 2 N + 1 = { 0 , 0 } S_{2N+1} = \{0,0\} S2N+1