Problem F: Frightful Formula

题目:
https://codeforces.com/gym/101480

给一个 n ∗ n n*n nn的矩阵,告诉第一行和第一列的数,并且有递推式
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,j1)+bF(i1,j)+c2i,jn
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 2n200000

思路:

  • 我们首先考虑求出每个初始值的贡献。
    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) (n22n2i)anibn1F(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} (n22n2i)。同理 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) (n22n2i)an1bniF(i,1).。
  • 对于 c c c的处理可以参考高中的求解递推数列,假设有
    a n = k a n − 1 + m a_n=ka_{n-1}+m an=kan1+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(an1+d)=kan1+(k1)d
    d = m k − 1 d=\frac{m}{k-1} d=k1m
    所以类似的
    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,j1)+bF(i1,j)+c=a(F(i,j1)+d)+b(F(i1,j)+d)=aF(i,j1)+bF(i1,j)+d(a+b1)
    d = c a + b − 1 d=\frac{c}{a+b-1} d=a+b1c,所以我们令 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,j1)+bf(i1,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=2n(n22n2i)anibn1f(1,i)+i=2n(n22n2i)an1bnif(i,1)=f(n,n)d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值