• 4535 ACM 礼尚往来 数学排列组合


    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4535
    题意:每个礼物都不相同的组合个数
    数学规律:
    将每个女友排序为1···n,对应的女友送男友的礼物排序为1···n;
    1<=k,h<=n;
    k,h为1··n的任意数,且k不等于h
    接下来讨论排列组合:
    接下来在第k个女友的位置放上一个礼物,有n-1种可能;
    假设k小于h
    1···k···h···n(女友)
    1···k···h···n(礼物)
    不妨假设礼物h放在了女友k上,现在思考哈,在礼物中,除了礼物k放在女友中某一个位置的可能是n-1,其他礼物都是n-2,这是由于礼物k的位置(女友k)已经被放了。
    接下来分两种情况讨论(L(n)表示n个礼物送个n个女友,每个礼物都不相同的组合个数)
    ·1·
    k放在h位置上
    那剩下位置有L(n-2)种可能。
    ·2·
    k不放在h位置上
    那剩下位置有L(n-1)种可能。
    所以:L(n)=(n-1)(L(n-2)+L(n-1))

    #include<cstdio>
    
    #define mod 1000000007  //10^9 + 7 
    long long  f[110];
    
    void get()
    {
        f[1]=0;
        f[2]=1;
        for(int i=3;i<101;i++)
            f[i]=(i-1)*(f[i-1]+f[i-2])%mod;
    }
    
    int main()
    {
        get();//注意要函数调用
        int t,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            printf("%I64d
    ",f[n]);
        }
    }
  • 相关阅读:
    Android编译相关资料的网址
    npm项目编译
    JAVA项目编译
    docker 常用命令[转载]
    jenkins安装的时候 提示字体问题的解决方法
    deployment
    kube-proxy运行机制分析【转载】
    kubelet tls
    js执行上下文和执行栈
    js事件循环(event loop)
  • 原文地址:https://www.cnblogs.com/CheeseIce/p/9588677.html
Copyright © 2020-2023  润新知