首页 > 编程知识 正文

杨辉三角第n行数字之和公式,杨辉三角数列通项公式

时间:2023-05-05 16:55:31 阅读:112819 作者:3953

主题: https://www.Luo gu.org/problem new/show/p 2822

解决问题的想法:

因为组合数有可能变大,所以对k取模型。 如果类型为0,则为k的倍数。 组合数实际上是杨辉三角。 (c[i][j]=c[i-1][j] c[i-1][j-1]。 这两种计算方法都是这个公式)

数组c[i][j]即c[I,j],ans[i][j]保存回答,先打上表

方法1:

ans [ I ] [ j ]=ans [ I-1 ] [ j ]-ans [ I-1 ] [ j-1 ] ans [ I ] [ j-1 ];

if (! c[I][j]j=I]ans[I][j];

注意:此时,I、j都从1~maxn开始遍历。 求出ans[i][j]时,与前一行对应的ans[i-1][j]不能为0。 否则,-a[i-1][j-1]将是负数,因为结果可能是错误的

方法2:

请勿仅基于输入的n的最大值创建表,而创建大小为maxn*maxn的表

if (! c[i][j] )

ans[i][j]=ans[i-1][j] 1;

else ans[i][j]=ans[i-1][j];

组合数数组c[][]的存储有两种方法。 只是控制输出的条件不同。 试了很久,才知道区别在哪里。 太弱了I和j都从1开始存,实际上存杨辉三角,第一排都是c(I,0 )

I和j都从1开始存储,不存储杨辉三角的第1列,此时的第1列都是c(I,1 )

交流电源线:

方法1

# include # include # include # include # include # include # include # include # include #

用户命名空间STD;

int t,k,n,m; //n=m

long long c[maxn][maxn]={0},ans[maxn][maxn]={0}; //求组合数的数组和答案的数组

void pre_solve (

{

c[0][0]=1;

for(intI=1; i=maxn; I )

c[i][i]=c[i][0]=1;

for(intI=1; I

方法2:

I和j从1开始存款,实际存了杨辉三角

# include # include # include # include # include # include # include # include # include #

用户命名空间STD;

int t,k,n,m; //n=m

long long c[maxn][maxn]={0},ans[maxn][maxn]={0}; //求组合数的数组和答案的数组

int maxnn=0,maxm=0;

结构节点{

int n,m;

}a[10001];

int main () )

{

//Freopen ()/users/zhangkanqi/desktop/11.txt '、' r '、stdin );

扫描(' % d % d )、t、k );

for(intI=0; I

I和j从1开始保存,杨辉三角的第一列不保存

# include # include # include # include # include # include # include # include # include #

用户命名空间STD;

int t,k,n,m; //n=m

long long c[maxn][maxn]={0},ans[maxn][maxn]={0}; //求组合数的数组和答案的数组

int maxnn=0,maxm=0;

结构节点{

int n,m;

}a[10001];

int main () )

{

freopen ()/users/zhangkanqi/desktop/11.txt )、(r )、stdin );

扫描(' % d % d )、t、k );

for(intI=0; I

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。