HDOJ 2049 不容易系列之(4)——考新郎
生活随笔
收集整理的這篇文章主要介紹了
HDOJ 2049 不容易系列之(4)——考新郎
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2049
首先,給每位新娘打扮得幾乎一模一樣,并蓋上大大的紅蓋頭隨機坐成一排;
然后,讓各位新郎尋找自己的新娘.每人只準找一個,并且不允許多人找一個.
最后,揭開蓋頭,如果找錯了對象就要當眾跪搓衣板...
看來做新郎也不是容易的事情...
假設一共有N對新婚夫婦,其中有M個新郎找錯了新娘,求發生這種情況一共有多少種可能.
Input 輸入數據的第一行是一個整數C,表示測試實例的個數,然后是C行數據,每行包含兩個整數N和M(1<M<=N<=20)。
Output 對于每個測試實例,請輸出一共有多少種發生這種情況的可能,每個實例的輸出占一行。
Sample Input 2 2 2 3 2
Sample Output 1 3
思路:組合+錯排公式
組合公式:
? ;錯排公式:f[i]=(i-1)*(f[i-1]+f[i-2]) (f[1]=0; f[2]=1;)
#include<stdio.h> #include<string.h> #include<stdlib.h>long long f[25];long long C(int n,int m) //組合公式 {int i;long long sum1,sum2;sum1=sum2=1;for(i=n;i>=(m+1);i--)sum1*=i;for(i=1;i<=(n-m);i++)sum2*=i;return sum1/sum2; }int main() {int n,m,t;long long ans;f[1]=0;f[2]=1;for(i=3;i<=20;i++) //錯排f[i]=(i-1)*(f[i-1]+f[i-2]);//scanf("%d",&t);while(scanf("%d%d",&n,&m)!=EOF){//scanf("%d%d",&n,&m);ans=C(n,m)*f[m];printf("%lld\n",ans);}return 0; }
總結
以上是生活随笔為你收集整理的HDOJ 2049 不容易系列之(4)——考新郎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HD 1003 Max Sum (最大字
- 下一篇: 老鼠的求爱之旅 (DP)