n个有序的元素应有n!个不同的排列,若一个排列使得所有的元素都不在原来位置上,则称这个排列为错排。
错排公式推导
设n个数1,2,3...,n错排数目为Dn,对于其中任意一个数i:
(1) 数i分别与其他的n-1个数交换位置,其余n-2个数进行错排,共得到(n-1)Dn-2个错排;
(2) 对除数i以外的n-1个数进行错排,然后i与其中每个数互换,得到(n-1)Dn-1个错排。
因此,得到递推关系:Dn=(n-1)(Dn-1 + Dn-2),D1=0,D2=1。它的通解为Dn=n!-C(n,1)(n-1)!+C(n,2)(n-2)! - ... +(-)C(n,n)1!。
HDU2048
题意:给出n个元素,求错排的概率。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef __int64 int64;
const int N = 21;
int64 d[N];
int64 f[N];
int main()
{
int i;
int c,n;
d[1] = 0;
d[2] = 1;
f[1] = 1;
f[2] = 2;
for(i = 3; i < N; i++)
{
d[i] = (i-1)*(d[i-1] + d[i-2]);
f[i] = f[i-1]*i;
}
scanf("%d",&c);
while(c--)
{
scanf("%d",&n);
double p = 1.0*d[n]/f[n]*100.0;
printf("%.2lf%%\n",p);
}
return 0;
}
HDU2068
题意:给出n个元素,求有>=一半的元素在自己的位置的组合数。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef __int64 int64;
const int N = 15;
int64 d[N];
//c(m,n),m>=n
int64 composite(int64 m, int64 n)
{
int64 i,j;
if(n==0)
return 1;
int64 result = 1;
for(i=m,j=1; j <= n; i--,j++)
result = result*i/j;
return result;
}
int main()
{
int i;
d[1] = 0;
d[2] = 1;
for(i = 3; i < N; i++)
d[i] = (i-1)*(d[i-1]+d[i-2]);
int n;
while(true)
{
scanf("%d",&n);
if(n==0)
break;
int k = n/2;
int64 result = 0;
for(i = 2; i <= k; i++)
result += composite(n,i)*d[i];
printf("%I64d\n",result+1);
}
return 0;
}
分享到:
相关推荐
### 分形几何——数学基础及其应用 #### 一、引言 分形几何是一门研究不规则几何形状的数学分支,这些形状具有自相似性、分数维数等特性。本书《分形几何——数学基础及其应用》(第二版)由英国数学家Kenneth ...
组合数学是数学的一个重要分支,...总之,卢开澄所著的《组合数学》一书是组合数学领域的宝贵资料,它不仅为学生和研究人员提供理论基础,而且通过实际应用案例,展示了组合数学在解决复杂问题时的实用价值和美妙之处。
北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮...
1. Hanoi问题:这是个组合数学中的著名问题。N个圆盘依其半径大小,从下而上套在A柱上,如下图示。每次只允许取一个移到柱B或C上,而且不允许大盘放在小盘上方。若要求把柱A上的n个盘移到C柱上请设计一种方法来,并...
6. **卡特兰数**:在组合数学中,卡特兰数是一类特定的整数序列,广泛应用于各种问题,如括号匹配、分割问题、格子路径等。 7. **递推关系**:组合数经常可以用递推关系来表示,例如C(n, k) = C(n-1, k-1) + C(n-1,...
总之,这份完整的《组合理论及其应用李凡长》课后习题答案提供了丰富的学习材料,不仅可以帮助巩固理论知识,还能锻炼解决实际问题的能力。通过深入学习和实践,读者能够掌握组合数学的精髓,为未来在相关领域的研究...
算法设计需要估算计算量和存储量。组合数学研究计数和枚举的方法和理论。
《五年级数学下册》第四单元“啤酒生产中的数学——比例 比例的应用”教案主要探讨了如何在实际问题中运用比例的知识。本单元旨在帮助学生深化对正比例和反比例概念的理解,并能灵活应用这些知识解决相关应用题。 ...
模糊数学——模糊矩阵运算PPT学习教案.pptx
离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;sourse...
在数学广角——鸽巢问题的应用能力检测卷中,涉及到多个具体的数学问题,通过实际应用情境来检验学生对鸽巢原理的理解和运用能力。 首先,第一部分是填空题,需要学生直接填写答案。这些问题包括但不限于以下几个...
这个问题可以通过组合数学中的排列组合原理来解决。我们将7个人中的夫妇看作一个整体,然后在剩下的5个独立个体中进行排列,最后考虑夫妇内部的排列方式。类似的,若7个人中有3对夫妇,从中取出6个人的夫妇均不相邻...
以下将详细介绍组合数学的一些核心知识点及其在编程中的应用。 1. **组合与排列**:组合是不考虑顺序的选择,例如从n个不同元素中选取k个,表示为C(n, k)或n选k。排列则是考虑顺序的选择,从n个不同元素中选取k个并...
7. 应用问题:组合数学广泛应用于计算机科学、运筹学、统计学、生物学、物理学等领域中的各种实际问题,如编码理论、网络设计、信息检索等。 《组合数学中文第五版》教材在上述各个方面均提供了详尽的讲解,并通过...
逻辑思维能力在理解和应用组合数学及其算法时至关重要。它涉及分析问题,抽象关键要素,并构建有效的解决方案。在IT领域,逻辑思维能力有助于设计高效的数据结构,比如哈希表、堆和图数据结构,这些都与组合数学密切...
最后,文档中提及的应用例子——错排问题,不仅是一个经典的组合问题,也是检验反演方法有效性的一个典型例证。错排问题的求解涉及到容斥原理,该原理可以用于计算多个事件至少发生一次的概率问题。通过容斥原理,...
第六章详细讨论了容斥原理及其应用,包括错位排列、禁止位置问题等。此外,还介绍了莫比乌斯反演原理作为容斥原理的推广。 递推关系和生成函数是组合数学中解决序列问题的重要工具。第七章介绍了线性齐次递推关系、...
通过阅读《具体数学——计算机科学基础》,读者可以建立起数学与计算机科学之间的桥梁,提升解决问题的能力。这本书不仅适合大学课堂使用,也适合作为自学资料,帮助计算机专业人士深化对数学在计算机科学中应用的...
总的来说,《离散数学及其应用》不仅提供了理论基础,还通过实例和练习帮助读者将理论应用于实际问题。对于希望在IT领域深入学习和发展的学生来说,这本书是不可或缺的资源。它能够帮助你建立扎实的数学思维,提升...