原题地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=451
主要思路在:http://zhidao.baidu.com/question/2783254.html
部分思路在代码里,自己看吧。。
#include<stdio.h>
int f(int n,int m) //计算从n个人中选m个人(不排序)的情况
{
long long max=1,min=1,a,b,c;
for(a=n,c=m;a>=m,c>0;a--,c--)
{
max=max*a;
min=min*c;
}
b=max/min;
return b;
}
int main()
{
long long a,b,n,m,c;
long long yi[25]={0,0,1};//计算在a个人写a个纸条,a个人都去拿纸条,但都没有拿到自己的纸条的情况
for(a=3;a<=20;a++)
yi[a]=(a-1)*(yi[a-1]+yi[a-2]);//
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%lld\n",f(n,m)*yi[m]);// f(n,m)yi[m]就是所求结果。。
}
}