记录编号 32450 评测结果 AAAAAAAAAA
题目名称 排列 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 1.326 s
提交时间 2011-11-06 21:07:22 内存使用 0.34 MiB
显示代码纯文本
#include <cstdio>
#include <memory.h>
using namespace std;
/*
void tryit(int x,int dep)
{
	int i;
	num[dep]=x;
	if (dep==n)
	{
		int c=0;
		for (i=2;i<=n;i++)
			if (num[i]>num[i-1])
				c++;
			else if (c+(n-1)-(i-1)<k)
				break;
		if (c==k)
		{
			total++;
			total%=2007;
		}
	}
	else
		for (i=1;i<=n;i++)
			if (!used[i])
			{
				used[i]=true;
				tryit(i,dep+1);
				used[i]=false;
			}
}
*/
int main(void)
{
	freopen("permutation.in","r",stdin);
	freopen("permutation.out","w",stdout);
	int i,j,n,k,temp,temp2,f[200][200];
	while (scanf("%d %d\n",&n,&k)==2)
	{
		memset(f,0,sizeof(f));
/*		for (i=1;i<=n;i++)
		{
			used[i]=true;
			tryit(i,1);
			used[i]=false;
		}
		printf("%d\n",total);*/
		f[1][0]=1;
		f[2][0]=1;
		f[2][1]=1;
		for (i=2;i<=(n-1);i++)
			for (j=0;j<=(i-1);j++)
			{
				temp=j+1;
				temp2=i+1-temp;
				f[i+1][j]=(f[i+1][j]+f[i][j]*temp%2007)%2007;
				f[i+1][j+1]=(f[i+1][j+1]+f[i][j]*temp2%2007)%2007;
			}
		printf("%d\n",f[n][k]);
	}
	fclose(stdin);
	fclose(stdout);
	return(0);
}