问题描述:有标注A、B、C的三个杯子,A、B、C杯的最大容量分别为8L、5L、3L,现有A杯中有水8L,请通过算法获取4L+4L水。
策略:
(1) 选择实现的语言(这里以java为例)
(2) 如果不知道算法该怎设计,可以先将必要的实体、边界找出,并抽象成类。(缩小所需考虑的内容)
(3) 按“已知算法->递归->分治->贪心->回溯法->分支限界法->动态规划->算法设计”来分析问题,判断是否符合某种算法。一般来说,符合某种算法的问题所需的内么容都是差不多的,例如:符合动态规划,可能就要考虑通式、矩阵、O(n^2)
(4) 按相应的算法分析步骤分析算法并初步实现
(5) 优化
(6) 专门针对时间复杂度、空间复杂度进行优化(如:降低空间复杂度,可将递归改为栈。在本篇中将直接以优化后的算法为准进行分析,即利用栈)
目录
0,分析输入输出
(1) 输入:最大容量、初始容量、及目标容量,如:
85 3
80 0
44 0
(2)输出:输出A、B、C三个杯中水量的变化,如:
[8,0,0]
[3,5,0]
[0,5,3]
……
[4,4,0]