FZU2282--错排公式

http://acm.fzu.edu.cn/problem.php?pid=2282

F[i]=(i-1)(F[i-2]+F[i-1])

 1 #include<cstdio>
 2 #include<iostream>
 3 #define LL long long
 4 #define Mod 1000000007
 5 #define maxn 10010
 6 using namespace std;
 7 int n,m,k;
 8 LL C[maxn][120],F[maxn],ans,tot[maxn];
 9 int main(){
10     F[1]=0,F[2]=1,tot[1]=1,tot[2]=2,tot[0]=1;
11     for(int i=3;i<=10000;i++){
12         F[i]=(i-1)*((F[i-2]+F[i-1])%Mod);
13         F[i]%=Mod;
14         tot[i]=tot[i-1]*i;
15         tot[i]%=Mod;
16     //    cout<<i<<‘ ‘<<tot[i]<<endl;
17     }
18     C[0][0]=1;
19     for(int i=1;i<=10000;i++){
20         C[i][0]=1;
21         for(int j=1;j<=min(i,101);j++){
22             C[i][j]=(C[i-1][j]+C[i-1][j-1])%Mod;
23         //    cout<<C[i][j]<<‘ ‘;
24         }
25         //cout<<endl;
26     }
27     int T;
28     cin>>T;
29     while(T--){
30         cin>>n>>k;
31         ans=0;
32         for(int i=0;i<k;i++){
33             ans+=C[n][i]*F[n-i];
34             ans%=Mod;
35         }
36         LL res=tot[n]-ans;
37         while(res<0) res+=Mod;
38         cout<<(res%Mod)<<endl;
39     }
40     return 0;
41 }
时间: 2024-08-26 15:26:17

FZU2282--错排公式的相关文章

hdu 1465(不容易系列之一)(水题,错排公式)(a[n]=(n-1)*(a[n-1]+a[n-2]))

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14924    Accepted Submission(s): 6207 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总

杭电 1465 不容易系列之一(错排公式)

http://acm.hdu.edu.cn/showproblem.php?pid=1465 不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14236    Accepted Submission(s): 5917 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了

错排公式

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)种方法

错排公式 不容易系列之一

大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样. 话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的.比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概率,所以至今我都觉得这是一件神奇的事情.如果套用一句经典的评语,我们可以这样总结:一个人做错一道选择题并不难,难的是全部

计数,排列错排公式

计数,排列Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Input Output Sample Input Sample Output Hint Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易

错排公式的学习

所谓错排,将一定数量的个体从它原来的位置换到一个非它原位置的方法总数. 错排可以利用递推来做,错排据了解也是可以直接利用组合数公式来做的,但是当 错排个体的数目巨大时,数据会非常的大. 因此即使利用递推,数组来存的方法做,仍要定义为long long 的数据类型,否 则数据会溢出. // 考察错排 #include <stdio.h> #include <stdio.h> long long f[30]; int main() { f[2]=1; f[3]=2; int i, n;

错排公式 错排(加组合)

递推的方法推导错排公式 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法; 综上得到 M(n)=(n-1)[M(n-2)+M

HDU 2068 RPG的错排(错排公式 + 具体解释)

RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8996    Accepted Submission(s): 3699 Problem Description 今年暑假杭电ACM集训队第一次组成女生队,当中有一队叫RPG,但做为集训队成员之中的一个的野骆驼居然不知道RPG三个人详细是谁谁.RPG给他机会让他猜猜,第一次猜

HDU 2068 RPG错排 错排公式

1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: 3.分析:原题意换句话说,就是针对1到N的全排列,错排元素的个数小于等于N的情况有多少: 那么,输出即为:    ,其中F[i]表示1到i的错排方案数,后面一项为组合数,即选取i个错排: 这里推导一下错排公式,F[N]表示1到N的错排方案:第一步:选取N放到1到N-1之中任意一个位置,这样就有N-1

[BZOJ 4563][Haoi2016]放棋子(错排公式)

Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. Solution 其实和给出的障碍没什么关系,可以直接上错排公式(因为一开始的障碍可以看做一个排列,然后放棋子等同于要你生成一个新的不能有和原来位置相同元素的排列) f[n]=(f[n-1]+f[n-2])*(n-1)(为什么的话上一篇里有说Qw