• 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;
    }



  • 相关阅读:
    Android系统移植与驱动开发案例 第一章
    收缩SQL数据库日志文件
    SQL Server Configuration Manager出错
    sql server 2008 评估期已过期解决办法
    服务器管理器打开角色、功能出错
    常用网络命令(windows)
    linux 常用命令
    获取指定月的最后一天
    浅谈JVM原理
    Maven+SSM+oracle框架实现简单的增删改查
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563593.html
Copyright © 2020-2023  润新知