记录编号 |
10000 |
评测结果 |
AAAAAAAAAA |
题目名称 |
诸侯安置 |
最终得分 |
100 |
用户昵称 |
zqzas |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.032 s |
提交时间 |
2009-04-23 17:56:42 |
内存使用 |
35.59 MiB |
显示代码纯文本
#include <iostream>
#define MAXN 210
const int P=504;
int ans,ori_n,n,k,many[MAXN],f[MAXN*MAXN][MAXN];
void dp()
{
int i,j,p;
//init
f[1][0]=0;
for (i=1;i<=n;i++)
f[1][i]=many[i];
//dp
for (i=2;i<=k;i++)
for (j=1;j<=n;j++)
{
f[i][j]=0;
if ((many[j]-(i-1))>0)
{
for (p=1;p<=j-1;p++)
{
f[i][j]+=f[i-1][p];
f[i][j]%=P;
}
f[i][j]*=many[j]-(i-1);
f[i][j]%=P;
}
}
for (i=1;i<=n;i++)
ans+=f[k][i];
ans%=P;
}
void run()
{
dp();
}
void make()
{
int i,j;
j=-1;
for (i=1;i<=n;i++)
{
if (i%2==1)
j+=2;
many[i]=j;
}
}
void ini()
{
scanf("%d%d",&ori_n,&k);
n=ori_n*2-1;
make();
}
int main()
{
freopen("empire.in","r",stdin);
freopen("empire.out","w",stdout);
ini();
if (k>n)
ans=0;
else
run();
if (k==0)
ans=1;
printf("%d",ans%P);
return 0;
}