P2051 [AHOI2009] 中国象棋 分析

· · 个人记录

我们注意到一个重要的性质:每一行每一列最多只能放两个炮。

我们可以设 f(i, j, k) 表示已经放完前 i 行,j 列是空的,k 列放了一个,那么有 m - j - k 列放了两个。我们并不需要知道具体是哪一列放了一个两个或者零个,只需要统计方案。

转移(这里滥用 \gets 表示在原来的值上加):

然后转移。