「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」合唱队形