HDU2049 不容易系列之(4)——考新郎

来源:互联网 发布:穆里尼奥讽刺颜强 知乎 编辑:程序博客网 时间:2024/05/22 08:11

排列组合 + 递推

先从n个人里面挑选m个人出来让他们找错新娘,这一共是有C(m,n)种情况

m个人找错新娘就是错排的问题,错了N多次,看了别人的思路才知道是这么回事,看来要当一个模型来记住了。

我们先让第一个新郎过来找,他找错一共有n-1中情况。

接着让第二个新郎过来找,他找错的情况分为两种:

1.他一定找到第一个新娘

2.他不找第一个新娘

对于第一种情况,有3,4,……,n  n-2个新郎新娘错排。

对于第二种情况,有2,3,……,n n-1个新郎新娘错排。

所以m个人错排的情况共有(m-1)(f[m-1]+f[m-2])种

#include <stdio.h>long long fact(int n) {    long long temp = 1;    int i;    for (i = 1; i <= n; ++ i)        temp *= i;    return temp;}intmain(int argc, char **argv) {    long long res[21];    int i, n, m;    res[1] = 0;    res[2] = 1;    for (i = 3; i < 21; ++ i) {        res[i] = (i - 1) * res[i - 1] + (i - 1) * res[i - 2];    }    int ncase;    scanf("%d", &ncase);    while (ncase--) {        scanf("%d%d", &n, &m);        printf("%lld\n", fact(n)/(fact(n - m) * fact(m)) * res[m]);    }    return 0;}



0 0
原创粉丝点击