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?

posted @ 2026-08-01 21:24  floaya  阅读(1)  评论(0)    收藏  举报