记录编号 |
32450 |
评测结果 |
AAAAAAAAAA |
题目名称 |
排列 |
最终得分 |
100 |
用户昵称 |
Truth.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);
}