zoukankan      html  css  js  c++  java
  • 组合数

    程序设计不可避免地有时间限制的。

    1s == 1000 ms.

    题目:https://vjudge.net/contest/317909?tdsourcetag=s_pcqq_aiomsg#problem/D

    Time limit:  1000 ms

    1.my solution 

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int MAXN=50;
    int C[MAXN+1][MAXN+1];
    int n,m;
    void f()
    {
        int i,j;
        for(i=0;i<=MAXN;i++)
        {
            C[0][i]=0;
            C[i][0]=1;
        }
        for(int i=1;i<=MAXN;i++)
        {
            for(j=1;j<=MAXN;j++)
                C[i][j]=(C[i-1][j]+C[i-1][j-1]);
        }
    }
    int main()
    {
        std::ios::sync_with_stdio(false);
        f();
        while(~scanf("%d%d",&n,&m))
        {
            if(n==0&&m==0) break;
            printf("%d
    ",C[n][m]);    
        }     
        return 0;
    }// 用了1840ms,超时了!

    2.

    在我的编译器上是1300ms,在vjudge上0ms通过的。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    typedef long long ll;
    ll a[10000000];
    
    int main()
    {
        ll n,m;
        while(~scanf("%I64d%I64d",&n,&m)&&(n||m))
        {
            if(n-m<m) m=n-m;
            a[0]=1;
            for(int i=1;i<=m;i++)
                a[i]=(n-i+1)*a[i-1]/i;//用C(n,m) = (n - m + 1) * C(n, m - 1) / m,由于除以m相对没那么容易越界
            printf("%d
    ",a[m]);
        }
        return 0;
    }
  • 相关阅读:
    Index(4.3)
    第七次会议(4.22)
    第六次会议(4.15)
    第五次会议(4.8)
    第四次会议(4.2)
    第三次会议(3.25)
    第二次扩大会议(3.19)
    第二次会议(3.25)
    第一次会议(3.11)
    牛客练习赛25A求1-x因数和(离散求和)
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11314946.html
Copyright © 2011-2022 走看看