zoukankan      html  css  js  c++  java
  • QDU67 礼上往来(错排问题)

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

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

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

      

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

      

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

      

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

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

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

    复制
    3
    1
    2
    4
    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
    ",f[n]);
        }
        return 0;
    }
    
    
    
    
  • 相关阅读:
    ioctlsocket()
    阻塞式socket例子学习
    accept()
    listen()
    WSAStartup
    C#动态操作DataTable(新增行、列、查询行、列等)
    C# 连接SQL Server数据库的几种方式--server+data source等方式
    ExcelHelper类
    c#使用椭圆签名算法制作软件序列号
    LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count 等
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/5097927.html
Copyright © 2011-2022 走看看