[HDU 2049] 不容易系列之(4)——考新郎 (错排问题)
来源:互联网 发布:淘宝卖家怎么改优惠价 编辑:程序博客网 时间:2024/04/30 21:34
不容易系列之(4)——考新郎
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049
题目大意:
有N对新婚夫妇,其中所有的新娘站成一列,都盖上了红布。然后让新郎去找新娘,每个新郎只能找一个新娘,而且不能一个对一个。问其中M个新郎找错新娘的情况有多少种。
思考过程:
这其实就是一个错排问题+排列组合问题
首先要从N个新郎当中找出M个找错的。即C(N,M)。其次是对这M组新人进行错排,为D(M)。而且两者之间是乘法原则
错排和排列组合地推公式:
由于是第一次写排列组合这块的内容,写一下如何用递推公式求 C(N,M) 和 D(M)。
(1)求C(N,M)。如果我们要从N个数当中抽出M个数,那么对于N个数当中的任何一个数来说,只有被抽到和没有被抽到两种情况。不妨设K,如果没有被抽到,则需要在剩下的 N - 1 个数当中抽 M 个。即C(N - 1,M)。如果K被抽到了,那么只需要在剩下的 N - 1 个数当中抽 M - 1 个。即C(N - 1, M - 1)
所以,C(N,M) = C(N - 1,M - 1) + C(N - 1,M)
(2)求D(N)。对于{1,2,3,……N} 这N个数,如果1在K的位置,K在1的位置,(由于K可以为剩下N - 1 个数当中任意一个,所以有N - 1 种选法)那么剩下的 N - 2 个数错排即可,为(N - 1)* D(N - 2)。如果K在1的位置,而1不在K的位置,那么把1当做K,相当于对N - 1 个数进行错排。为 (N - 1)* D(N - 1)
所以,D(N)= (N - 1)* (D(N - 1)+ D(N - 2))
代码:
/* 错排*/#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<set>#include<ctype.h>#include<algorithm>#include<string>#define PI acos(-1.0)#define maxn 1000#define INF 1<<25#define mem(a, b) memset(a, b, sizeof(a))typedef long long ll;using namespace std;int C[22][22];ll D[22];void init(){ for (int i = 0; i <=20; i++) C[i][0] = 1; C[1][1] = 1; for (int i = 2; i <= 20; i++) for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1]; D[1] = 0, D[2] = 1; for (ll i = 3; i <= 20; i++) D[i] = (i - 1) * (D[i - 1] + D[i - 2]);}int main (){ init(); int c, n ,m; cin>>c; while(c--) { scanf("%d%d", &n, &m); ll sum; if (m * 2 > n) sum = C[n][n - m]; else sum = C[n][m]; sum *= D[m]; cout<<sum<<endl; } return 0;}
- [HDU 2049] 不容易系列之(4)——考新郎 (错排问题)
- [ACM] hdu 2049 不容易系列之(4)——考新郎 (组合+错排)
- hdu 2049 不容易系列之(4)——考新郎 (错排,递推)
- HDU 2049 不容易系列之(4)——考新郎(错排)
- HDU 2049 不容易系列之(4)——考新郎(错排+组合数学)
- HDU 2049 不容易系列之(4)——考新郎 (错排公式)
- hdu 2049 不容易系列之(4)——考新郎(错排)
- hdu 2049 不容易系列之(4)——考新郎(错排+组合数)
- 错排问题系列之 不容易系列之(4)——考新郎 hdoj 2049
- HDU 2049 不容易系列之(4)——考新郎 (错排)
- HDU 2049 不容易系列之(4)——考新郎 (错排)
- hdu 2049 不容易系列之(4)——考新郎(错排+排列组合)
- hdu-2049-不容易系列之(4)——考新郎(错排+组合)
- HDU 2049--不容易系列之(4)——考新郎【错排】
- HDU 2049 不容易系列之(4)——考新郎 (错排公式+递归)
- hdu 2049 不容易系列之(4)——考新郎 错排
- HDU 2049 不容易系列之(4)——考新郎(错排)(递推)
- hdu 2049 错排 不容易系列之(4)——考新郎
- Android应用程序窗口(Activity)的绘图表面(Surface)的创建过程分析
- 第九章练习
- 网络文件系统NFS
- Gossip 协议
- 程序员编程艺术第三十二~三十三章:最小操作数,木块砌墙问题
- [HDU 2049] 不容易系列之(4)——考新郎 (错排问题)
- struts2中将jsp table中的数据导出到excel表格中
- asp.net将数据导出Execl表格
- Single Number
- OC IOS 如何将BCD码转换为IOS 的ACSII码
- 独木舟上的旅行
- 如何评估oracle AWR 的在oracle 中的存储情况
- jsp学习笔记——Scriptlet(脚本小程序)
- java中各种小知识点