为了方便说明,将容量为12品脱,8品脱,5品脱瓶子分别称为大瓶子,中瓶子,小瓶子。按照下面2种规则中的如何一种可以解决这个问题: 规则: 1. 大瓶子只能倒入中瓶子 2. 中瓶子只能倒入小瓶子 3. 小瓶子只能倒入大瓶子 4. 小瓶子只有在已经装满的情况下才能倒入大瓶子 5. 若小瓶子被倒空,则无论中瓶子是否满,应马上从中瓶子倒入小瓶子 ? ? 之所以要规定倒酒的顺序是为了防止状态重复。而根据这5条规则,大瓶子每次倒入中瓶子的酒总是8品脱,小瓶子每次倒入大瓶子的酒总是5品脱。(请结合下面的表来理解这句话,理解这点很重要) ? ? 有了上面的规定后,倒酒的顺序就确定下来了:
?? | ||||||||||||||||||||||||||||||||||||
设大,中,小三个瓶子容量分别是C1,C2,C3,需要倒出的容量是R 则实际上要是我们能将容量为R的酒倒到中瓶子和小瓶子中就可以啦(有点废话) ? ? 设大瓶子倒满中瓶子X次,从小瓶子中倒入大瓶子Y次。 那么显然由大瓶子累次倒入中瓶子和小瓶子总共C2*X的酒。而由小瓶子倒入大瓶子一共有C3*Y的酒。 那么最终,小瓶子和中瓶子剩余的酒显然就是 C2*X - C3*Y ? ? 因此,泊松分酒问题实质上转化为下面的不定方程是否有正整数解的问题: ? ? C2*X - C3*Y = R ? ? 对于我们的问题, C1=12,C2=8,C3=5,R=6 ? ? 倒酒规则实质上相当于解下面这个不定方程: 8X - 5Y = 6? ( 限定 X > 0 ,Y > 0 ) 最小整数解是 X=2,Y= 2 ? ? 表示倒满8品脱的瓶子2次,5品脱的瓶子倒空2次 那么8品脱的瓶子和5品脱的瓶子剩酒总量必然是 8 * 2 – 5 * 2 = 6 |
?
原文:http://www.cnblogs.com/yxx123/p/5227273.html