HDOJ 2049 不容易系列之(4)——考新郎
生活随笔
收集整理的這篇文章主要介紹了
HDOJ 2049 不容易系列之(4)——考新郎
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2049
首先,給每位新娘打扮得幾乎一模一樣,并蓋上大大的紅蓋頭隨機(jī)坐成一排;
然后,讓各位新郎尋找自己的新娘.每人只準(zhǔn)找一個(gè),并且不允許多人找一個(gè).
最后,揭開蓋頭,如果找錯(cuò)了對(duì)象就要當(dāng)眾跪搓衣板...
看來做新郎也不是容易的事情...
假設(shè)一共有N對(duì)新婚夫婦,其中有M個(gè)新郎找錯(cuò)了新娘,求發(fā)生這種情況一共有多少種可能.
Input 輸入數(shù)據(jù)的第一行是一個(gè)整數(shù)C,表示測(cè)試實(shí)例的個(gè)數(shù),然后是C行數(shù)據(jù),每行包含兩個(gè)整數(shù)N和M(1<M<=N<=20)。
Output 對(duì)于每個(gè)測(cè)試實(shí)例,請(qǐng)輸出一共有多少種發(fā)生這種情況的可能,每個(gè)實(shí)例的輸出占一行。
Sample Input 2 2 2 3 2
Sample Output 1 3
思路:組合+錯(cuò)排公式
組合公式:
? ;錯(cuò)排公式: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++) //錯(cuò)排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; }
總結(jié)
以上是生活随笔為你收集整理的HDOJ 2049 不容易系列之(4)——考新郎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HD 1003 Max Sum (最大字
- 下一篇: 老鼠的求爱之旅 (DP)