「NOIP 2004」合唱队形
记忆化搜索
定义一个 solve(x, lim, dir)
x 表示处理完的层数,所有x == n是就return
lim 是限制条件
dir 表示方向,true为向上,false向下
当 dir == true 时,显然有以下情况
- 若 height[x+1] > lim
- 选 solve(x+1, height[x+1], true)
- 不选 solve(x+1, lim, true)
- 若 height[x+1] < lim
- 不选 solve(x+1, lim, true)
- 选,并改方向 solve(x+1, lim, false)
- 若 height[x+1] == lim
- 只能跳 solve(x+1, lim, false)
当 dir == false时,不能再换方向,显然有以下情况
- 若 height[x+1] > lim
- 不选 solve(x+1, lim, false)
- 若 height[x+1] < lim
- 选 solve(x+1, height[x+1], false)
| 1 | 
 | 
「NOIP 2004」合唱队形