专栏文章

P5376 [THUPC 2019] 过河卒二 题解

P5376题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipnu089
此快照首次捕获于
2025/12/03 15:02
3 个月前
此快照最后确认于
2025/12/03 15:02
3 个月前
查看原文
怎么题解区就我的做法是 O(2kk+k2m)O(2^kk+k^2m)
首先发现卒可以从棋盘的上方或右方走出棋盘等价于卒最后走到 (n+1,m+1)(n+1,m+1),因为卒走出方格以后到 (n+1,m+1)(n+1,m+1) 的路径是唯一的。
先不考虑卒从 (x,y)(x,y) 走到 (x+1,y+1)(x+1,y+1) 这种情况和障碍,那么由过河卒的熟知结论,从 (1,1)(1,1) 走到 (n+1,m+1)(n+1,m+1) 有方案数为 Cn+mnC_{n+m}^n,可以理解为从要走的 m+nm+n 步中选出 nn 步沿 xx 轴走。
然后我们考虑一下卒从 (x,y)(x,y) 走到 (x+1,y+1)(x+1,y+1) 怎么处理。考虑直接暴力枚举这样走的次数,那么设从 (1,1)(1,1) 走到 (x+1,y+1)(x+1,y+1) 的方案数为 i=0min(n,m)Cn+mii×Cn+m2ini\sum\limits_{i=0}^{\min(n,m)}C_{n+m-i}^{i}\times C_{n+m-2i}^{n-i}(其实看一下式子基本都能理解),使用 Lucas 定理求解。
接下来考虑障碍的情况。发现障碍很少,那么我们可以 O(2k)O(2^k) 枚举选哪些障碍,用容斥原理计算。可以通过 O(k2m)O(k^2m) 预处理任意两个障碍之间的方案数来降低复杂度。
总复杂度 O(2kk+k2m)O(2^kk+k^2m),代码写得比较丑就不放了。

评论

0 条评论,欢迎与作者交流。

正在加载评论...