题目:
https://codeforces.com/gym/101480
给一个
n
∗
n
n*n
n∗n的矩阵,告诉第一行和第一列的数,并且有递推式
F
(
i
,
j
)
=
a
F
(
i
,
j
−
1
)
+
b
F
(
i
−
1
,
j
)
+
c
2
≤
i
,
j
≤
n
F(i,j)=aF(i,j-1)+bF(i-1,j)+c\quad 2\le i,j\le n
F(i,j)=aF(i,j−1)+bF(i−1,j)+c2≤i,j≤n
求
F
(
n
,
n
)
m
o
d
1
0
6
+
3
F(n,n)\;mod\;10^6+3
F(n,n)mod106+3,
2
≤
n
≤
200000
2\le n\le 200000
2≤n≤200000。
思路:
- 我们首先考虑求出每个初始值的贡献。
F ( 1 , i ) F(1,i) F(1,i)对 F ( n , n ) F(n,n) F(n,n)的贡献是 ( 2 n − 2 − i n − 2 ) a n − i b n − 1 F ( 1 , i ) {2n-2-i\choose n-2}a^{n-i}b^{n-1}F(1,i) (n−22n−2−i)an−ibn−1F(1,i)。
可以这样理解, F ( 1 , i ) F(1,i) F(1,i)会对下面和右面有贡献,就相当于 F ( 1 , i ) F(1,i) F(1,i)每次可以向下或向右走,向右走会乘 a a a,向下走乘 b b b,所以 a a a的幂就是横向距离,同理 b b b。至于系数,就是从初始点往下往右走到 ( x , y ) (x,y) (x,y)的方案数。初始位置为 ( 2 , i ) (2,i) (2,i),因为刚开始只能往下走。所以就是 ( 2 n − 2 − i n − 2 ) {2n-2-i\choose n-2} (n−22n−2−i)。同理 F ( i , 1 ) F(i,1) F(i,1)的贡献为 ( 2 n − 2 − i n − 2 ) a n − 1 b n − i F ( i , 1 ) {2n-2-i\choose n-2}a^{n-1}b^{n-i}F(i,1) (n−22n−2−i)an−1bn−iF(i,1).。 - 对于
c
c
c的处理可以参考高中的求解递推数列,假设有
a n = k a n − 1 + m a_n=ka_{n-1}+m an=kan−1+m
可以构造变成等比数列
( a n + d ) = k ( a n − 1 + d ) a n = k a n − 1 + ( k − 1 ) d \begin{aligned} (a_n+d)&=k(a_{n-1}+d)\\ a_n&=ka_{n-1}+(k-1)d\\ \end{aligned} (an+d)an=k(an−1+d)=kan−1+(k−1)d
则 d = m k − 1 d=\frac{m}{k-1} d=k−1m。
所以类似的
F ( i , j ) = a F ( i , j − 1 ) + b F ( i − 1 , j ) + c ( F ( i , j ) + d ) = a ( F ( i , j − 1 ) + d ) + b ( F ( i − 1 , j ) + d ) F ( i , j ) = a F ( i , j − 1 ) + b F ( i − 1 , j ) + d ( a + b − 1 ) \begin{aligned} F(i,j)&=aF(i,j-1)+bF(i-1,j)+c\\ \big(F(i,j)+d\big)&=a\big(F(i,j-1)+d\big)+b\big(F(i-1,j)+d\big)\\ F(i,j)&=aF(i,j-1)+bF(i-1,j)+d(a+b-1)\\ \end{aligned} F(i,j)(F(i,j)+d)F(i,j)=aF(i,j−1)+bF(i−1,j)+c=a(F(i,j−1)+d)+b(F(i−1,j)+d)=aF(i,j−1)+bF(i−1,j)+d(a+b−1)
则 d = c a + b − 1 d=\frac{c}{a+b-1} d=a+b−1c,所以我们令 f ( i , j ) = F ( i , j ) + d f(i,j)=F(i,j)+d f(i,j)=F(i,j)+d
f ( i , j ) = a f ( i , j − 1 ) + b f ( i − 1 , j ) f(i,j)=af(i,j-1)+bf(i-1,j) f(i,j)=af(i,j−1)+bf(i−1,j)
再用上面的贡献算,则
f ( n , n ) = ∑ i = 2 n ( 2 n − 2 − i n − 2 ) a n − i b n − 1 f ( 1 , i ) + ∑ i = 2 n ( 2 n − 2 − i n − 2 ) a n − 1 b n − i f ( i , 1 ) F ( n , n ) = f ( n , n ) − d \begin{aligned} f(n,n)&=\sum_{i=2}^{n}{2n-2-i\choose n-2}a^{n-i}b^{n-1}f(1,i)+\sum_{i=2}^{n}{2n-2-i\choose n-2}a^{n-1}b^{n-i}f(i,1)\\ F(n,n)&=f(n,n)-d \end{aligned} f(n,n)F(n,n)=i=2∑n(n−22n−2−i)an−ibn−1f(1,i)+i=2∑n(n−22n−2−i)an−1bn−if(i,1)=f(n,n)−d