• HDU 1465 错排问题


      错排问题简单的理解就是{123..n}的排列中每个数字都不在原来位置上的排列, 设Dn为n个元素错排的数量, 那么Dn = (n-1)*(Dn-1+Dn-2)。其中D1=0, D2=1。关于错排的另外一个数学表达式就是n!*(1-1/1!+2/2!+...+(-1)^n/n!)。。这一题就是求Dn直接递推即可。代码如下:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    long long D[100];
    
    int main()
    {
        D[0] = 1; D[1] = 0;
        for(int i=2; i<=30; i++)
            D[i] = (i-1)*(D[i-1]+D[i-2]);
        int n;
        while(cin>>n)
        {
            cout<<D[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    java中的静态变量与实例变量
    Java中的关键字this
    继承和多类的基础(C++)
    11-1:(42)接雨水
    10-2
    10-1
    9-2
    9-1
    8-2
    8-1
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5209576.html
Copyright © 2020-2023  润新知