Time limit1000 msMemory limit32768 kBOSWindowsSource
递推求解专题练习(For Beginner)
problem description
国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:
首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;
然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.
最后,揭开盖头,如果找错了对象就要当众跪搓衣板…
看来做新郎也不是容易的事情…
假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
问题链接:https://vjudge.net/contest/279631#problem/I
问题描述:设又N对新婚夫妇,其中有M个新郎找错了新娘,发生这种情况一共有多少种可能。
问题分析:该题可是用递归调用解决,类似于C (N M)排列组合数学问题。
程序说明:
c++程序如下:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<math.h>
using namespace std;
long long ans[25];
int a,b,t;
long long c(int m,int n)
{
if(n==0) return 1;
if(m==n) return 1;
if(n==1) return m;
else return c(m-1,n-1)+c(m-1,n);
}
int main()
{
ans[1]=0;ans[2]=1;
for(int i=3;i<=20;i++)
{
ans[i]=(ans[i-1]+ans[i-2])*(i-1);
}
ans[1]=1;
cin>>t;
while(t--)
{
cin>>a>>b;
cout<<c(a,a-b)*ans[b]<<endl;
}
return 0;
}