zoukankan      html  css  js  c++  java
  • hdu 2049 不容易系列之(4)——考新郎 (错排递推)

      当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
      第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
      第二步,放编号为k的元素,这时有两种情况
          ⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有M(n-2)种方法;
          ⑵第k个元素,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;
      综上得到:
          M(n)=(n-1)[M(n-2)+M(n-1)]
      特殊地,M⑴=0,M⑵=1
     
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    long long ans[21];
    int Quanchuopai()
    {
        int i;
        ans[1]=0;
        ans[2]=1;
        for(i=3;i<21;i++)
        {
            ans[i]=(i-1)*(ans[i-1]+ans[i-2]);
        }
        return 0;
    }
    int main()
    {
        int i,p,_case;
        int n,m;
        Quanchuopai();
        scanf("%d",&_case);
        while(_case--)
        {
            scanf("%d%d",&n,&m);
            p=n-m;
            p=min(p,m);
            long long r=1; //用int 型会溢出,Wrong
            for(i=0;i<p;i++)
            r*=(n-i);
            for(i=1;i<=p;i++)
            r/=i;
            printf("%I64d
    ",r*ans[m]);
        }
        return 0;
    }
  • 相关阅读:
    c# – 通过反射获取命名空间中的所有类型
    宝塔任务计划通道设置
    DRF项目框架基础设计
    Redis-数据特征和应用场景
    Redis-持久化详解
    Dockerfile文件详解
    ntp同步阿里服务器时间(centos)
    NUC8/11更新EC Firmware
    ambarella H2 kernel调试记录
    MobaXterm 执行make menuconfig不能删除字符
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3213953.html
Copyright © 2011-2022 走看看