LOJ#6374 网格
题解:
挺好的一道题
两次容斥+一次二项式反演
首先考虑部分分不存在k的限制
然后我们发现两维之间是互相独立的
下面以x轴为例
然后问题就变成了
$$\sum\limits_{i=1}^{R} {xi}=k (xi<=Mx)$$
这个东西是个经典问题,容斥做就可以了
$$h(R)=\sum\limits_{i=0}^{R}{{(-1)}^{i}*C_R^i *p(i)}$$
$$p(x)= C_{Tx-(Mx+1)*x+R-1}^{R-1}$$
但是这样还不对,因为走$(0,0)$是不合法的
所以我们求出来的$h(R)$是至多走了$R$步的方案数
令$g(x)$表示正好走了$x$步$(0,0)$的方案数
$$h(R)=\sum\limits_{i=0}^{R} { C_R^i *g(i) }$$
由这个可以二项式反演得出$g(R)$
$$g(R)=\sum\limits_{i=0}^{R} { {(-1)}^{R-i} * C_R^i *h(i) }$$
这个复杂度是$O(R*MIN(R,Tx/Mx))$的
现在加入了k个不能走的限制
显然我们需要继续容斥
因为都是$g$的倍数所以可以$/g$后进行
$dp[i][j]$表示选出$i$个和为$j$的方案数
$$ans=\sum\limits_{i=0}^{n} { {(-1)}^{i} \sum\limits_{j=0}^{100} {dp[i][j]* C_R^i *calc(Tx-j*G,R-i)} }$$
时间复杂度的话
注意到因为$g>=1e4$,所以$Mx$也要$>=1e4$
那么复杂度就是$O(50*(1e6/1e4)*(1e6/1e4)*1e3)$
并且这个很显然是不满的