zoukankan      html  css  js  c++  java
  • [NOIp2016] 组合数问题

    洛谷 P2822 传送门

    这么水的题我居然还调了好几次......

    对于所有询问,k都是一样的。

    所以先用杨辉三角求出2000以内所有组合数mod k的值c[i][j]。

    如果c[i][j]%k==0,那么c[i][j]对答案的贡献f[i][j]就是1。

    最后对f[i][j]求个前缀和就好了。

     1 #include<cstdio>
     2 
     3 int t,k,n,m;
     4 int c[2005][2005];
     5 int f[2005][2005];
     6 
     7 int main()
     8 {
     9     scanf("%d%d",&t,&k);
    10     c[0][0]=1%k;
    11     for(int i=1;i<=2000;i++)
    12     {
    13         c[i][0]=1%k;
    14         for(int j=1;j<=i;j++)
    15         {
    16             c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
    17         }
    18     }
    19     for(int i=0;i<=2000;i++)
    20     {
    21         for(int j=0;j<=i;j++)
    22         {
    23             if(!c[i][j])f[i][j]=1;
    24         }
    25     }
    26     for(int i=1;i<=2000;i++)
    27     {
    28         f[i][0]+=f[i-1][0];
    29         for(int j=1;j<=2000;j++)
    30         {
    31             f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
    32         }
    33     }
    34     for(int i=1;i<=t;i++)
    35     {
    36         scanf("%d%d",&n,&m);
    37         if(m>n)m=n;
    38         printf("%d
    ",f[n][m]);
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    数据库操作
    jquery 第一章
    算法很美 第一章
    python 学习第四天
    python学习第三天
    python学习第二天
    学习python的第一天
    C#-线程
    C#-流、存储
    C#-集合
  • 原文地址:https://www.cnblogs.com/eternhope/p/9734168.html
Copyright © 2011-2022 走看看