Recipient | ||
[ Submit Code ] [ Top 20 Runs ] | ||
Acceteped : 66 | Submit : 227 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
Description | ||
题目描述快递小哥每天都辛苦的送快递,今天他需要送N份快递给N个收件人,第i份快递需要送给第i个收件人。请问其中发生恰好K个送错了的情况数是多少? 输入存在多样例。每行输入两个整数N和K,1≤N≤1000,0≤K≤N。如果两个都为0,则表示输入结束,这个样例不需要处理。 输出每行输出一个样例的结果,因为数值会比较大,所有结果需要对109+7取模。 样例输入1 1 2 1 3 2 1000 1000 0 0 样例输出0 0 3 37043040 解释: 组合数和错排这里的解法都是用到的递推 组合数:递推公式是C(n,m)=C(n-1,m-1)+C(n,m-1);因为对于m个物体中的一个物体,要么被选,要么不被选,两种可能,所以如果被选了,就只需要从剩下的m-1个物体中选n-1个即C(n-1,m-1),如果没有被选,就需要从剩下的m-1个物体中选n个即C(n,m-1),然后相加,即C(n,m)=C(n-1,m-1)+C(n,m-1)。 错排公式:递推公式为f(n)=(n-1)*(f(n-1)+f(n-2));因为对于n个物体错排,如果第一个物体错排的是第k个物体(n-1)种选择,那么分析第k个物体,如果第k个物体的位置错排的是第1个物体那么剩下的n-2个物体再进行错排就可以了即f(n-2)如果第k个物体的位置错排的不是第1个物体而是w那么就相当于把第k个物体扔了直接再第一个物体下面排w即f(n-1)然后相加。即f(n)=(n-1)*(f(n-1)+f(n-2))。 |
acm中的“组合数”和“错排”
最新推荐文章于 2020-11-04 23:13:53 发布