• 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

  • 相关阅读:
    电脑间网络连接稳定性检查工具Network Pinger
    C#FirstOrDefault()返回值是否可能是null
    06.请求和响应
    ViewPager2+Fragment+TabLayout
    Android控件
    04.HTTP
    11.ListView
    09.常用控件
    08.回收活动、活动的启动模式
    Android多线程
  • 原文地址:https://www.cnblogs.com/sevenyuanluo/p/9971843.html
Copyright © 2020-2023  润新知