[ABC154F]Many Many Paths
题目链接
题目大意
有一个人在点\((0,0)\)上,可以移动,每次移动的规则如下:
- 如果现在人在点\((x,y)\)上,那么它可以走到点\((x+1,y)\)上或\((x,y+1)\)上
定义\(f(r,c)\)表示这个人走到点\((r,c)\)的方案数
给你\(r1,c1,r2,c2\),求\(\sum\limits_{i=r1}^{r2}\sum\limits_{j=c1}^{c2}f(i,j)\)
对\(10^9+7\)取模
解决方法
容易发现\(f(i,j)\)总是有向上的\(i\)步和向右的\(j\)步,所以方案的数量只用考虑走的方向的排列个数,即\(f(i,j)=C_{i+j}^{i}=C_{i+j}^{j}\)
因此可以写出一个\(O(n^2)\)的写法:
枚举\(i\in[r1,r2]\)和\(j\in[c1,c2]\),累加\(C_{i+j}^{j}\)
即:
\[ans=\sum\limits_{i=r1}^{r2}\sum\limits_{j=c1}^{c2}C_{i+j}^{j}
\]
考虑优化
将\(\sum\limits_{j=c1}^{c2}C_{i+j}^{j}\)单独来看
可以将其修改为
\[\sum\limits_{j=0}^{c2}C_{i+j}^{j}-\sum\limits_{j=0}^{c1-1}C_{i+j}^{j}
\]
我们知道平行求和:
\[\sum\limits_{i=0}^{n}C_{m+i}^{i}=C_{n+m+1}^{n}
\]
因此直接套式子得出
\[C_{i+c2+1}^{c2}-C_{i+c1-1+1}^{c1-1}
\]
带回原式就是
\[\sum\limits_{i=r1}^{r2}\left(C_{i+c2+1}^{c2}-C_{i+c1-1+1}^{c1-1}\right)
\]
此时时间复杂度为\(O(n)\),可以通过此题
浙公网安备 33010602011771号