zoukankan      html  css  js  c++  java
  • HDU2200 Eddy's AC难题【组合计算】

    Eddy's AC难题

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5860    Accepted Submission(s): 2782

    Problem Description
    Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数量摘录下来,然后从中选择一部分人(或者全部)按照ac的数量分成两组进行比较,他想使第一组中的最小ac数大于第二组中的最大ac数,但是这样的情况会有很多,聪明的你知道这样的情况有多少种吗?

    特别说明:为了问题的简化,我们这里假设摘录下的人数为n人,而且每个人ac的数量不会相等,最后结果在64位整数范围内.
    Input
    输入包含多组数据,每组包含一个整数n,表示从Ranklist上摘录的总人数。
    Output
    对于每个实例,输出符合要求的总的方案数,每个输出占一行。
    Sample Input
    2 4
    Sample Output
    1 17
    Author
    Eddy

    问题链接HDU2200 Eddy's AC难题

    问题简述参见上文。

    问题分析:将n个数排序,然后分成两组,这种分法共有n-1种,各种情况算一下组合即可。据说这种做法在高中数学中称为插板。

    程序说明:函数C()的实现原理需要看参考链接的那篇博文。

    题记:(略)


    参考链接HDU2519 新生晚会【组合计算】


    AC的C++语言程序如下:

    /* HDU2200 Eddy's AC难题 */
    
    #include <stdio.h>
    
    /* 计算组合函数:n中取m */
    long long C(int n, int m) {
         long long s=1;
         int i;
    
         for(i=1; i<=m; i++)
             s = s * (n - i + 1) / i;
    
         return s;
     }
    
    int main(void)
    {
        int n, i;
        long long ans;
    
        while(scanf("%d", &n) != EOF) {
            ans = 0;
    
            for(i=2; i<=n; i++)
                ans += (i - 1) * C(n, i);
    
            printf("%lld
    ", ans);
        }
    
        return 0;
    }



  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563593.html
Copyright © 2011-2022 走看看