码迷,mamicode.com
首页 > 其他好文 > 详细

hdu2049(组合数学)

时间:2014-06-02 18:51:43      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   a   

题意:每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.最后,揭开盖头,如果找错了对象就要当众跪搓衣板...假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.


解法:从N中选出M个C[n][m],然后乘上错排公式;f[n]=(n-1)*(f[n-1]+f[n-2]);f[0]=1;f[1]=0;


代码:

/******************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
//freopen ("in.txt" , "r" , stdin);
using namespace std;

#define eps 1e-8
const double pi=acos(-1.0);
typedef long long LL;
const int Max=25;
const int INF=1000000007;

LL f[Max];
LL C[Max][Max];
void init()
{
    f[1]=0;
    f[0]=1;
    for(int i=2;i<Max;i++)
        f[i]=(i-1)*(f[i-1]+f[i-2]);
        for(int i=0;i<Max;i++)
            for(int j=0;j<=i;j++)
        C[i][j]=j?C[i-1][j-1]+C[i-1][j]:1;
}

int main()
{
  init();
  int t;cin>>t;
  while(t--)
  {
      int n,m;scanf("%d%d",&n,&m);
      cout<<C[n][m]*f[m]<<'\n';
  }
   return 0;
}

hdu2049(组合数学),布布扣,bubuko.com

hdu2049(组合数学)

标签:c   style   class   blog   code   a   

原文地址:http://blog.csdn.net/xiefubao/article/details/28114621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!