zoukankan      html  css  js  c++  java
  • HDU 1521 排列组合

    HDU_1521

        第一次做这种不能转化成类似e^x形式的指数生成函数的题目,一开始愣住了,还以为要想办法用整数分式来表示中间结果,后来发现只要用double处理就可以了。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 15
    int N, M, a[MAXD];
    double f[MAXD][MAXD], fac[MAXD];
    void prepare()
    {
    int i, j, k;
    fac[0] = 1;
    for(i = 1; i <= 10; i ++)
    fac[i] = i * fac[i - 1];
    }
    void solve()
    {
    int i, j, k;
    for(i = 1; i <= N; i ++)
    scanf("%d", &a[i]);
    memset(f, 0, sizeof(f));
    f[0][0] = 1;
    for(i = 1; i <= N; i ++)
    for(j = 0; j <= a[i]; j ++)
    for(k = 0; k + j <= M; k ++)
    f[i][k + j] += f[i - 1][k] / fac[j];
    printf("%.0lf\n", f[N][M] * fac[M]);
    }
    int main()
    {
    prepare();
    while(scanf("%d%d", &N, &M) == 2)
    {
    solve();
    }
    return 0;
    }


  • 相关阅读:
    IOS-JSON数据解析
    IOS-APP发布资料收集
    IOS-webService
    ASP.NET MVC学习之路:模板页
    io流
    线程
    事件监听
    java基础面试题
    递归调用
    三目运算: x?y:z
  • 原文地址:https://www.cnblogs.com/staginner/p/2381248.html
Copyright © 2011-2022 走看看