码迷,mamicode.com
首页 > 其他好文 > 详细

acm2049引出的错排问题

时间:2015-05-27 18:41:12      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

    直接讲错排问题 解决了错排问题 代码很简单。

    声明:假设共有n个男生 f(n)表示有n个男生选错的情况总数 同理可得 f(n-1)表示n-1男生选错的情况的总数 

    用逆向递推的思想 第一步.第n个男生可以选的位置有n个 其中错的位置有n-1个 假设他现在选择了错的里面的一个位置K

                            第二步.此时我们可以先让k来选择 因为他比较特殊(无论选哪都是错的位置) 虽然他选什么位置都是错的

                                当可以供他选择的位置中还是有特殊的位置 我们分为第n个男生的位置和非第n个男生的位置

                               1.如果他选了第n个男生原来的位置 那接下来就简单了 因为剩余的人的编号和剩余的位置的编号是一样的 故可以认为其实是错排n-2个男生 即f(n-2)

                               2.他不能选第n个男生原来的位置 我们举个例子:

                                          剩余位置    1 2 3 4 5

                                           剩余人      1 2 3 4 5                                 图1

                                  假设1男孩坐到了3号位置 则现在变成了 

                                           剩余位置   1  2  4   5                                     图2

                                             剩余人    2  3  4   5 

                                   此时3不能选择1 可以选择2 4 5 我们这时可以把3看做1了(因为他有着和1同样的特点 即只能选择非1的座位)

                                    不信我们看这个   剩余位置  1   2    4    5                      图3

                                                           剩余人     2   1    4    5 

                                                           图3的1不能选择1 和图3不能选择1是一样的 其他的数字都可以选 所以我们这里认为 把图2中的 2 3 4 5错排给1 2 4 5和

                                                           把图3中的 2 1 4 5错排给1 2 4 5的情况的可能性数量是一样的 即f(n-1)种

                                第三步:结合第一步和第二步可得f(n)=(n-1)*(f(n-1)+f(n-2)) 这个式子贼靓!!

                               

 

acm2049引出的错排问题

标签:

原文地址:http://www.cnblogs.com/aloney/p/4534058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!