original link - https://www.luogu.org/problem/P4351

题意:

一个 n ∗ n n*n n∗n矩阵,给出第一行的数 x i x_i xi​和第一列的数 y i y_i yi​,其他的数 F ( i , j ) = a F ( i , j − 1 ) + b F ( j , i − 1 ) + c F(i,j)=aF(i,j-1)+bF(j,i-1)+c F(i,j)=aF(i,j−1)+bF(j,i−1)+c。求 F ( n , n ) F(n,n) F(n,n)。

解析:

简答推几项可以发现 F F F中的 x i , y i , c x_i,y_i,c xi​,yi​,c是独立的,所以考虑怎么快速求出每一项的系数矩阵。

假设左上角为 1 1 1,那么推出的每个位置的贡献应该是这样的:

[ 1 a a 2 a 3 b 2 a b 3 a 2 b 4 a 3 b b 2 3 a b 2 6 a 2 b 2 10 a 3 b 2 b 3 4 a b 3 10 a 2 b 3 20 a 3 b 3 ] \begin{bmatrix} 1&a&a^2&a^3\\b&2ab&3a^2b&4a^3b\\b^2&3ab^2&6a^2b^2&10a^3b^2\\b^3&4ab^3&10a^2b^3&20a^3b^3 \end{bmatrix} ⎣⎢⎢⎡​1bb2b3​a2ab3ab24ab3​a23a2b6a2b210a2b3​a34a3b10a3b220a3b3​⎦⎥⎥⎤​

可以发现是杨辉三角乘上 a i b j a^ib^j aibj,坑的在于 F ( 1 , i ) F(1,i) F(1,i)对 F ( 1 , i + 1 ) F(1,i+1) F(1,i+1)并没有贡献,所以要将 F ( 1 , i ) ∗ b F(1,i)*b F(1,i)∗b作为 1 1 1,从 ( 2 , i ) (2,i) (2,i)开始。

这是比较简单的部分,还有 c c c的系数呢, c c c从 F ( 2 , 2 ) F(2,2) F(2,2)开始,贡献应该是:

[ 1 a + 1 b + 1 a ( b + 1 ) + b ( a + 1 ) + 1 ] \begin{bmatrix} 1&a+1\\b+1&a(b+1)+b(a+1)+1 \end{bmatrix} [1b+1​a+1a(b+1)+b(a+1)+1​]

这样不太好考虑,我们发现和原来的区别在于每一个位置多了一个 1 1 1,所以自己推一下可以发现就是原来的那个矩阵求和:

[ 1 a a 2 a 3 b 2 a b 3 a 2 b 4 a 3 b b 2 3 a b 2 6 a 2 b 2 10 a 3 b 2 b 3 4 a b 3 10 a 2 b 3 20 a 3 b 3 ] \begin{bmatrix} 1&a&a^2&a^3\\b&2ab&3a^2b&4a^3b\\b^2&3ab^2&6a^2b^2&10a^3b^2\\b^3&4ab^3&10a^2b^3&20a^3b^3 \end{bmatrix} ⎣⎢⎢⎡​1bb2b3​a2ab3ab24ab3​a23a2b6a2b210a2b3​a34a3b10a3b220a3b3​⎦⎥⎥⎤​

考虑斜着的每一列,发现副对角线以上部分,每一列的和都可以从上一列的和乘上 ( a + b ) (a+b) (a+b)得到,而过了副对角线后要减掉两边那两个的贡献。以第 4 4 4列( b 3 , 3 a b 2 , 3 a 2 b , a 3 b^3,3ab^2,3a^2b,a^3 b3,3ab2,3a2b,a3)为例,往下的 b 3 ∗ b b^3*b b3∗b已经超出矩阵了,所以要减掉。

代码:

/**  Author : Jk_Chen*    Date : 2019-09-22-14.30.03*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define rep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)
#define per(i,a,b) for(int i=(int)(a);i>=(int)(b);i--)
#define mmm(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pill pair<int, int>
#define fi first
#define se second
#define debug(x) cerr<<#x<<" = "<<x<<'\n';
const LL mod=1e6+3;
const int maxn=1e6+2;
LL rd(){ LL ans=0; char last=' ',ch=getchar();while(!(ch>='0' && ch<='9'))last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans; return ans;
}
/*_________________________________________________________begin*/LL Pow(LL a,LL b,LL mod){LL res=1;while(b>0){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;
}
/*_________________________________________________________Pow*/LL fac[maxn];
LL ifac[maxn];
LL C(int i,int j){return fac[i]*ifac[j]%mod*ifac[i-j]%mod; }LL n,a,b,c;LL Pa[maxn],Pb[maxn];
LL Get(int i,int j){return C(i+j-2,i-1)*Pa[j-1]%mod*Pb[i-1]%mod;}
LL Row[maxn],Column[maxn];
int main(){fac[0]=1;rep(i,1,maxn-1)fac[i]=fac[i-1]*i%mod;ifac[maxn-1]=Pow(fac[maxn-1],mod-2,mod);per(i,maxn-2,0){ifac[i]=ifac[i+1]*(i+1)%mod;}n=rd(),a=rd(),b=rd(),c=rd();Pa[0]=Pb[0]=1;rep(i,1,maxn-1)Pa[i]=Pa[i-1]*a%mod,Pb[i]=Pb[i-1]*b%mod;rep(i,1,n){Column[i]=rd();}rep(i,1,n){Row[i]=rd();}LL ans=0;rep(i,2,n){ans=(ans+Row[i]*b%mod*Get(n-1,n-i+1)%mod)%mod;}rep(i,2,n){ans=(ans+Column[i]*a%mod*Get(n-i+1,n-1)%mod)%mod;}LL sum=1;n--;LL tmp=1;rep(i,2,n){tmp=tmp*(a+b)%mod;sum=(sum+tmp)%mod;}rep(i,2,n){tmp=(tmp*(a+b)-Get(n,i-1)*b-Get(i-1,n)*a)% mod;sum=(sum+tmp)%mod;}sum=sum*c%mod;ans%=mod;ans=((ans+sum)%mod+mod)%mod;printf("%lld\n",ans);return 0;
}/*_________________________________________________________end*/

Frightful Formula(杨辉三角求和 组合数学)相关推荐

  1. 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )

    文章目录 一.二项式定理 二.组合恒等式 ( 递推式 1 ) 三.组合恒等式 ( 递推式 2 ) 四.组合恒等式 ( 递推式 3 ) 帕斯卡 / 杨辉三角公式 五.组合分析方法 六.递推式组合恒等式特 ...

  2. 杨辉三角寄数列求和c语言,杨辉三角与高阶等差数列的求和

    杨辉三角与高阶等差数列的求和 作者:李学雷 来源:<新课程学习·下>2013年第07期 摘 要:如果一个数列的每一项减去它前面的一项所得的差都相等,这个数列就叫做等差数列.但对于某些数列而 ...

  3. C语言二维数组中:主次对角线求和,上下三角求和,杨辉三角,矩阵转置

    p8 有些的结论需要直接记住 目录 矩阵转置 主对角线和次对角线 下三角 和上三角(一般是让求和) 下三角 上三角 杨辉三角 矩阵转置 不是方阵 需要用到第二个二维数组 b[i][j]=a[i][j] ...

  4. Codeforces 815 B Karen and Test 杨辉三角 组合数学

    题目链接: http://codeforces.com/problemset/problem/815/B 题目描述: 给你n个数, 让你求第一个数加第二个数 + 第二个数减第一个数 + ...... ...

  5. 算法--组合数学:杨辉三角数学分析以及Java实现

    1.定义 杨辉三角,是二项式系数在三角形中的一种几何排列. 下图为杨辉三角部分数据 2.杨辉三角规律 前提:每行端点与结尾的数为1 最重要的规律: 每个数字等于上一行的左右两个数字之和.可用此性质写出 ...

  6. HDU 6129 Just do it 组合数学 杨辉三角 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6129 题目描述: 将a序列转化成b序列, b[i] = a[1]^a[2]^a[3]^a[4]^.. ...

  7. 杨辉三角+判断奇数并求和

    这两周部门没有专门出题目让我们做,这很明显是考验我们的学习自主性, 嗯,这考验到我了,这两周也只是把以前的代码用子函数的方法改了一下代码,这两天老师开始讲指针了,可恶,函数视频还没怎么看,已经要开始看 ...

  8. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧. 118.杨辉三角https://leetcode-cn.com/problems/pascals-triang ...

  9. 杨辉三角、组合数 性质的探究

    1.每个数等于它上方两数之和. :可用于dp.前缀和 2.每行数字左右对称,由1开始逐渐变大. :可用于简化递推.优化 3.第n行的数字有n项. :可用于dp.循环的上下界确定. 第n行数字和为2n- ...

最新文章

  1. 高通投资商汤,是因为手机刷脸市场吗?阿里巴巴再砸AI芯片,弄啥咧 | AI三分钟
  2. Spring MVC集成Spring Data Reids和Spring Session实现Session共享
  3. html5 jquery版工作流设计器,基于jQuery的web在线流程图设计器GooFlow
  4. java模块是什么6_Java 9 揭秘(6. 封装模块)
  5. 平稳序列的拟合和预测之序列的预测
  6. 访谈编码怎么做_怎么才能让口才得到提升
  7. ubuntu下修改网卡名称
  8. 上大学有用吗?35岁以上的程序员都去哪里了
  9. mysql统计某一个数据库中有几张表
  10. 计算机网络安全中的破译定义,计算机网络安全
  11. Java性能调优实战-怎样才能做好性能调优?
  12. BASLER巴斯勒线扫相机使用流程
  13. kali安装网卡驱动
  14. 手机python编程软件 turtle,安卓手机python编程软件
  15. BZOJ.1812.[IOI2005]Riv 河流(树形背包)
  16. Redmi Note 11T什么时候发布 Redmi Note 11T配置如何
  17. 目前主流跨端开发技术一览
  18. win10系统tensorflow2.4.0-gpu安装“Not creating XLA devices, tf_xla_enable_xla_devices not set”解决方法
  19. 10W+字C语言硬核总结(二),值得阅读收藏!
  20. LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)

热门文章

  1. Android 使用Zxing
  2. 百里挑一,这四款良心软件,好用到你不想卸载
  3. android设置模糊度,Android设置高斯模糊
  4. Python——Numpy基础教程
  5. 如何成为一名数据分析师:必备技能 TOP5
  6. HTML——6(表格)
  7. 渐入效果和随机转场如何批量添加到视频?
  8. 《三国演义》与“项目管理”——向刘备拜师
  9. Android常用第三方网站统计工具比较
  10. Delphi 线程的开始、暂停、继续、停止