zoukankan      html  css  js  c++  java
  • 泊松分酒

    为了方便说明,将容量为12品脱,8品脱,5品脱瓶子分别称为大瓶子,中瓶子,小瓶子。按照下面2种规则中的如何一种可以解决这个问题:

    规则:

    1. 大瓶子只能倒入中瓶子

    2. 中瓶子只能倒入小瓶子

    3. 小瓶子只能倒入大瓶子

    4. 小瓶子只有在已经装满的情况下才能倒入大瓶子

    5. 若小瓶子被倒空,则无论中瓶子是否满,应马上从中瓶子倒入小瓶子

       

    之所以要规定倒酒的顺序是为了防止状态重复。而根据这5条规则,大瓶子每次倒入中瓶子的酒总是8品脱,小瓶子每次倒入大瓶子的酒总是5品脱。(请结合下面的表来理解这句话,理解这点很重要)

       

    有了上面的规定后,倒酒的顺序就确定下来了:

    12品脱瓶子

    8品脱瓶子

    5品脱瓶子

      

    12

    0

    0

    初始状态

    4

    8(倒进)

    0

      

    4

    3

    5(倒出)

      

    9

    3

    0

      

    9

    0

    3

      

    1

    8(倒进)

    3

      

    1

    6

    5(倒出)

    搞到6品脱了

    6

    6

    0

    完成

      

    设大,中,小三个瓶子容量分别是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

     

  • 相关阅读:
    前端cookie操作用到的一些小总结
    sublime 官方正版,自己用的插件配置,最轻量级安装流程
    Node.js 终端输出颜色设置
    Mac中设置别名 (转载)
    Swift 3 使用objc_setAssociatedObject
    ruby 笔记
    编程模式
    rvm pod gem 等常用命令
    node.js 笔记
    Node.js 对象合并
  • 原文地址:https://www.cnblogs.com/yxx123/p/5227273.html
Copyright © 2011-2022 走看看