记录编号 |
26300 |
评测结果 |
AAAAAAAAAA |
题目名称 |
排列 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.740 s |
提交时间 |
2011-07-23 15:59:25 |
内存使用 |
0.27 MiB |
显示代码纯文本
#include <cstdio>
const int MAXN=105;
const int MO=2007;
inline void Add(int &a,int b)
{
a=(a+b)%MO;
}
int N,K;
int d[MAXN][MAXN],C[MAXN][MAXN];
int main()
{
freopen("permutation.in","r",stdin);
freopen("permutation.out","w",stdout);
C[0][0]=1;
for(int i=1;i<MAXN;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%MO;
}
d[1][0]=1;
for(int i=2;i<MAXN;i++)
for(int j=0;j<i;j++)
{
int &nd=d[i][j];
nd=(nd+d[i-1][j])%MO; //N > ...
if (j!=0)
nd=(nd+d[i-1][j-1])%MO; // ...< N
for(int p=1;p<i-1;p++)
for(int k=0;k<j;k++)
nd=(nd+C[i-1][p]*d[p][k]%MO*d[i-1-p][j-1-k])%MO; // .. < N > ..
}
while(scanf("%d%d",&N,&K)!=EOF)
printf("%d\n",d[N][K]);
return 0;
}