zoukankan      html  css  js  c++  java
  • 关于错排的理解

    关于错排。。。杭电2048

    N张票的所有排列可能自然是Ann = N!种排列方式
    现在的问题就是N张票的错排方式有几种。

    首先我们考虑,如果前面N-1个人拿的都不是自己的票,即前N-1个人满足错排,现在又来了一个人,他手里拿的是自己的票。
    只要他把自己的票与其他N-1个人中的任意一个交换,就可以满足N个人的错排。这时有N-1种方法。

    另外,我们考虑,如果前N-1个人不满足错排,而第N个人把自己的票与其中一个人交换后恰好满足错排。
    这种情况发生在原先N-1人中,N-2个人满足错排,有且仅有一个人拿的是自己的票,而第N个人恰好与他做了交换,这时候就满足了错排。
    因为前N-1个人中,每个人都有机会拿着自己的票。所以有N-1种交换的可能。

    综上所述:f(n) = (i - 1) * [f(n - 1) + f(n - 2)]

    也就是说第一种排法中缺少的是第n个人与其他人互换的情况。。。。而第二种排法正好补充了第n个人与其他人之一互换的情况。。。。

  • 相关阅读:
    git 常用命令
    目录
    算法--双栈排序
    算法--栈的翻转练习题
    算法--双栈队列
    算法--可查询最值的栈练习题
    Spark算子--union、intersection、subtract
    Spark算子--take、top、takeOrdered
    Spark算子--countByKey
    Spark算子--SortBy
  • 原文地址:https://www.cnblogs.com/chaosheng/p/2329592.html
Copyright © 2011-2022 走看看