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;
    }
  • 相关阅读:
    STM32 USB应用——VCP
    基础数据类型与字节数组相互转换 BitConvter类
    C# 16进制与字符串、字节数组之间的转换
    C语言函数手册学习
    C串口通信
    C#串口通信
    C Socket通信编程
    C SOCKET编程
    C# SOCKE通信
    socket阻塞与非阻塞,同步与异步、I/O模型
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3213953.html
Copyright © 2011-2022 走看看