2017"百度之星"程序设计大赛

来源:互联网 发布:mac 相册导入u盘 编辑:程序博客网 时间:2024/06/09 16:07

想到了组合数就能做的水题,不是很难,打个表就行了。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1010,mo=1e9+7;long long vis[N][N];/*组合数的表*/long long comb(int m,int n){    if(n==0||n==m) return 1;    if(vis[m][n]) return vis[m][n];/*用之前打的表推后面的*/    return comb(m-1,n-1)%mo+comb(m-1,n)%mo;/*递推公式,每个值取个模就好了*/}int main(){    int T,n,m;    scanf("%d",&T);    for(int i=1;i<=1000;i++)//打表         for(int j=i;j>=1;j--)//因为是从小的组合数推大的,所以表示从小开始打//             vis[i][j]=comb(i,j)%mo;    while(T--){        scanf("%d%d",&n,&m);        printf("%I64d\n",vis[max(m,n)][min(m,n)]);//因为m>n而且这道题m,n互换//值是相同的,所以取大取小     }    return 0;}



原创粉丝点击