有n个带编号的人和n个带编号的座位,求每个人都不坐在相同号码座位的方案数目

题目描述:

    有 n 位同学编号分别为1, 2, ..., n; 有 n 个座位编号分别为1, 2, ..., n。

    现在为每一位同学安排一个座位,求每个同学都坐在与自己编号不同的座位的方案数目。

分析:动态规划思想:

    假设 i 位同学,i 个座位,满足题意的方案数为 f(i)。

    考察分别有 (i-1) 和 i 位同学的情况。

    为了形象化地进行思考,设 i = 4。原来 i = 3 的时候,有 f(3) 种满足题意的方案。现在加入 i=4,则前面 1,2,... (i-1) 即 1,2,3 都可以坐在编号=4 的座位上,所以有 (i-1) 种可能。  

    假设现在是 1 坐在 4 号座位上,即:

          座位:1   2   3   4

          学生:?   ?   ?   1

    现在考察 4 号学生应该坐在哪里呢?

    (1) 4 号学生 坐在 1 号座位上,即:

          座位:1   2   3   4

          学生:4   ?   ?   1

     那么,我们可以非常明显地看到,可以把 1号座位和4 号座位拿开,让 2号同学和3号同学选 2号座位和 3号座位,即 f(i-2) ( f(2) )

(2)4 号学生 不能坐 1号座位上,那么此时:

         待安排的学生: 2 号,3 号,4 号

         待安排的座位: 1 号,2 号,3 号

          约束条件: 2 号学生   不能坐   2 号座位; (题目明确的要求!)

                             3 号学生   不能坐   3 号座位;

                             4 号学生   不能坐   1 号座位

         好!这个题目最有意思的就是这种情况,我们可以抽象地将 4号学生和 1号座位 想象成相匹配的 x 号学生和 x 号座位,那么:

          待安排的学生为 x 号,2号,3号;

          待安排的座位为 x 号,2号,3号;

          显然,满足题意的方案数 = f(i-1)  ( f(3) )

综上所述, f(i) = (i-1) * ( f(i-1) + f(i-2) )

这道题比较难理解的就是: 当 4 号学生 不能坐 1号座位上,需要抽象地将此问题转化为 规模为 (i-1) 的原问题。

猜你喜欢

转载自blog.csdn.net/yangguangqizhi/article/details/83045657
今日推荐