提供一个无脑 bitset 优化暴力 DP 的做法。
bitset
首先如果 n+mn + mn+m 为偶数则无解。
然后可以想到一个朴素的 DP:设 fi,j,kf_{i, j, k}fi,j,k 为是否存在从左上角到 (i,j)(i, j)(i,j) 且经过 kkk 个 111 的路径,转移简单不讲。
这个 DP 的 kkk 只需要枚举到 (n+m−1)/2(n + m - 1) / 2(n+m−1)/2 的范围,所以时间复杂度为 O(nm(n+m))O(nm(n + m))O(nm(n+m)),常数大概为 1/21/21/2。
然后这个 DP 很明显可以用 bitset 优化,时间复杂度变为 O(nm(n+m)w)O(\dfrac{nm(n + m)}w)O(wnm(n+m)),www 取 323232 或 646464,我们就得到了一个非常小的常数。
然后呢?然后就冲过去了。