[ABC154F]Many Many Paths

题目链接

atcoder

洛谷

题目大意

有一个人在点\((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)\),可以通过此题

posted on 2026-10-19 17:36  Qinluyan  阅读(3)  评论(0)    收藏  举报