P4363 [九省联考 2018] 一双木棋 chess-题解
非常好题目
第一次见轮廓线状压和对抗搜索
想必记忆化搜索不是什么难事
由于一次合法的落子要求它的左上全都有棋子,所以从上到下,每行的棋子数单调递减
-
idea1:
每行的棋子数使用一个\(log_2(m)+1\) 位二进制数表示
这样总共就有\(2^{n(log_2(m)+1)}\) 种状态
但是因为题目限制,状态数不会很大,可以先搜出有用的状态再dp -
idea2:
还有更妙的状态设计方法,一个状态\(s\) 表示已经落子的格子的轮廓线,一共有\(\binom{n+m}{n}\)种状态(由格路计数原理得)
具体的,规定\(s\)二进制下高位往低位开始,表示从棋盘左下角走到右上角,\(1\)表示向上走一条边,\(0\)表示向右走一条边
以题目中的棋盘举例,假如第一行全有棋子,状态就是\(10001\);棋盘没有棋子,状态就是\(11000\)
M3?
浙公网安备 33010602011771号