问题:
有一座金字塔,从上到下,第一层有一个杯子、第二层有两个杯子,依次类推。对杯子进行编号,有如下的形状:
12 3
4 5 6
每个杯子的容量为C升,从塔顶倒下L升水,当1号杯子满了之后,会等量溢出到2号和3号杯子。当2号和3号满了,2号溢出到4号和5号,3号溢出到5号和6号,注意5号接受来自两个杯子的水。依次类推。给定C和L,请问,第n杯里有多少水。
from @陈利人
分析:
此题没有想到好的方法,只想到模拟(或者算DP),
f[leveli, index] 表示第leveli层的第index个酒杯共收到的水的量。那么:
f[leveli, index] = ( f[leveli-1, index-1] - C ) / 2 + ( f[leveli-1, index] - C ) / 2 。
这里 f[leveli-1, index-1] - C、 f[leveli-1, index] - C 不小于0, 否则相应项为0。
实现:使用hashMap做备忘录