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