luoguP2822组合数问题

Posted sevenyuanluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luoguP2822组合数问题相关的知识,希望对你有一定的参考价值。

第一道绿题祭(本人苣蒻

题面如下:

 技术分享图片技术分享图片

 

根据组合恒等式:从n个物品中取出m个物品——C(n,m)=C(n,n-m)=C(m-1,n-1)+C(m,n-1)

【推导推荐百度 |-|

这样我们就可以写出递推的代码

首先不能忘记初始化C(0,0)=0

C(1,0)=C(n,0)=C(1,1)=1

然后放代码

#include<cstdio>
#include<algorithm>
using namespace std;
int c[2010][2010];
int ans[2001][2001];
int main() {
    int n,m,k,a;
    scanf("%d%d",&a,&k);
    c[0][0]=0;
    c[1][0]=1;
    c[1][1]=1;//初始化
    for(int i=2; i<=2000; i++) {
        c[i][0]=1;//初始化
        for(int j=1; j<=i; j++) {
            c[i][j]=(c[i-1][j-1]%k+c[i-1][j]%k)%k;//递推,注意c[i][j]可能很大,要适当模k
            ans[i][j]=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];//前缀和
            if(!c[i][j])ans[i][j]++;
        }
        ans[i][i+1]=ans[i][i];
    }
    for(int s=0; s<a; s++) {
        scanf("%d%d",&n,&m);
        if(m>n)m=n;
        printf("%d
",ans[n][m]);
    }
}

//才不告诉你们本苣蒻什么都不会代码是(学长写的

//等哪天能懂了再回来写题解(悄咪咪立flag

 

以上是关于luoguP2822组合数问题的主要内容,如果未能解决你的问题,请参考以下文章

luoguP2822 组合数问题

P2822 组合数问题

P2822 组合数问题

luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)

洛谷 P2822 组合数问题 如题

做题记录:P2822 组合数问题