noip2016组合数问题

来源:互联网 发布:全国大学生网络文化节 编辑:程序博客网 时间:2024/06/06 05:08

TAT调3个小时还要看别人题解
到底哪里re了还是不懂
并没心思翻译泉州dalao的Pascal

#include<bits/stdc++.h>using namespace std;long long t,k,n,m,c[2010][2010],ans[2010][2010];int main(){    cin>>t>>k;    for(int i=0;i<=2000;i++)    {        c[i][0]=1;        c[i][i]=1;//杨辉三角的边界     }    for(int i=1;i<=2000;i++)    {        for(int j=1;j<=i;j++)        {            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;        }    }//打一个杨辉三角  (帕斯卡恒等式)     //用ans存 到i,j的答案    for(int i=1;i<=2000;i++)    {        for(int j=1;j<=2000;j++)        {            ans[i][j]=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];//前缀和             if(c[i][j]==0&&j<=i) ans[i][j]++;//很重要,不能循环时让j<=2000         }     }      for(int i=1;i<=t;i++)     {        cin>>n>>m;        cout<<ans[n][m]<<endl;      }    return 0;}