QDU67 礼上往来(错排问题)

描述

每当节日来临,女友众多的xxx总是能从全国各地的女友那里收到各种礼物。

有礼物收到当然值得高兴,但回礼确是件麻烦的事!

无论多麻烦,总不好意思收礼而不回礼,那也不是xxx的风格。

  

现在,即爱面子又抠门的xxx想出了一个绝妙的好办法:他准备将各个女友送来的礼物合理分配,再回送不同女友,这样就不用再花钱买礼物了!

  

假设xxx的n个女友每人送他一个礼物(每个人送的礼物都不相同),现在他需要合理安排,再回送每个女友一份礼物,重点是,回送的礼物不能是这个女友之前送他的那个礼物,不然,xxx可就摊上事了,摊上大事了......

  

现在,xxx想知道总共有多少种满足条件的回送礼物方案呢?

输入

输入数据第一行是个正整数T,表示总共有T组测试数据(T <= 100); 每组数据包含一个正整数n,表示叽叽哥的女友个数为n( 1 <= n <= 100 )。

输出

请输出可能的方案数,因为方案数可能比较大,请将结果对10^9 + 7 取模后再输出。 每组输出占一行。

样例输入1 复制

3
1
2
4

样例输出1

0
1
9

思路:

错排公式:f[n]=(n-1)*(f[n-1]+f[n-2]);

/* ***********************************************
Author        :devil
Created Time  :2016/1/4 10:02:06
************************************************ */

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cstdio>
using namespace std;
const long long mod=1e9+7;
long long f[105];
int main()
{
    //freopen("in.txt","r",stdin);
    f[1]=0;
    f[2]=1;
    for(int i=3; i<=100; i++)
        f[i]=(i-1)*(f[i-1]+f[i-2])%mod;
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%d\n",f[n]);
    }
    return 0;
}

				
时间: 2024-12-15 01:33:51

QDU67 礼上往来(错排问题)的相关文章

ZZULI 1867: 礼上往来【错位排序】

1867: 礼上往来 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 216  Solved: 65 SubmitStatusWeb Board Description 每当节日来临,女友众多的xxx总是能从全国各地的女友那里收到各种礼物. 有礼物收到当然值得高兴,但回礼确是件麻烦的事! 无论多麻烦,总不好意思收礼而不回礼,那也不是xxx的风格. 现在,即爱面子又抠门的xxx想出了一个绝妙的好办法:他准备将各个女友送来的礼物合理分配,再回送不同女友,

错排公式

1 递推的方法推导错排公式 当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)种方法

hdu 4535(排列组合之错排公式)

吉哥系列故事——礼尚往来 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1417    Accepted Submission(s): 733 Problem Description 吉哥还是那个吉哥 那个江湖人称“叽叽哥”的基哥 每当节日来临,女友众多的叽叽哥总是能从全国各地的女友那里收到各种礼物. 有礼物收到当然值得高兴,但回礼确是

错排问题

问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法? 这个问题推广一下,就是错排问题,是组合数学中的问题之一. 考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排. n个元素的错排数记为D(n). 研究一个排列错排个数的问题,叫做错排问题或称为更列问题. 错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题.这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里,有

lightoj 1095 - Arrange the Numbers (错排数)

题意: 求n个数的排列,前m个中有k个在自己的位置上的方法数. 思路: 设D[n]为n个元素的错排数. 于是我们有D[1] = 0 D[2] = 1: D[n] = (D[n-1] + D[n-2]) * (i-1) 考虑问题本身,我们首先从前m个数选k个数不动.即C(m,k).对于没有选的前m中的m-k个数肯定是参与了错排,而后面n-m个数中参加错排的个数不定,所以我们枚举一个后面n-m个数中选出i(0 <= i <= n - m)个数有没有参与错排.总共就有n-k-i参与了错排. 综上所述

RPG的错排

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8387    Accepted Submission(s): 3415 Problem Description 今 年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜 猜,第一次猜:R是公主,P是草

23-新娘匹配(错排问题)

/*   错排问题: 问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法?这个问题推广一下,就是错排问题,是组合数学中的问题之一.考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排. n个元素的错排数记为D(n). 研究一个排列错排个数的问题,叫做错排问题或称为更列问题.错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题.这个问题有许多具体的版本,如在写信时将n封信装到n个

经典递推问题错排公式分析

问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法? 这个问题推广一下,就是错排问题,是组合数学中的问题之一.考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排. n个元素的错排数记为D(n). 研究一个排列错排个数的问题,叫做错排问题或称为更列问题. 错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题.这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里,有多

杭电2048错排

错排公式是f(n)=(n-1)(f(n-1)+f(n-2)) 不过还是稍稍的分析一下这个入门题 就像一个将信件放入不同信箱的例子, 我们先考虑前n-1的情况 1.前n-1个信件全部都放错了,那么我们考虑n个的情况时,只需要将第N个信件与前n-1个信件的任意一 个做一个交换就ok了,这个结果是(n-1)*f(n-1) 2.然后再考虑前n-1个并没有完全放错,那么要想使第n个信封加入时和和其中的某一个信封进行交换可 以实现n个信件全部放错的情况,那么必须前n-1个当中有且只有一个信件是放正确的,就是