记录编号 10000 评测结果 AAAAAAAAAA
题目名称 诸侯安置 最终得分 100
用户昵称 Gravatarzqzas 是否通过 通过
代码语言 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;
}