记录编号 9980 评测结果 AAAAAAAAAA
题目名称 诸侯安置 最终得分 100
用户昵称 GravatarBYVoid 是否通过 通过
代码语言 C++ 运行时间 0.021 s
提交时间 2009-04-23 14:45:09 内存使用 0.42 MiB
显示代码纯文本
/* 
 * Problem: HAOI2009 模拟 3 empire
 * Author: Guo Jiabao
 * Time: 2009.4.23 14:44
 * State: Solved
 * Memo: 递推 动态规划
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
const int MAXN=201,MOD=504;
using namespace std;
int N,K,tot=0,Ans;
int F[MAXN][MAXN];
inline int len(int k)
{
	return k%2?k:k-1;
}
void init()
{
	freopen("empire.in","r",stdin);
	freopen("empire.out","w",stdout);
	scanf("%d%d",&N,&K);
	N=N*2-1;
	for (int i=1;i<=N;i++)
		tot += len(i);
}
void dynamic()
{
	int i,j,k;
	memset(F,0,sizeof(F));
	F[0][0]=1;
	for (i=1;i<=K;i++)
	{
		for (j=i;j<=N;j++)
		{
			F[i][j]=0;
			for (k=i-1;k<=j-1;k++)
			{
				F[i][j] += F[i-1][k] * ( len(j) - (i-1) );
				F[i][j] %= MOD;
			}
		}
	}
	for (i=K;i<=N;i++)
	{
		Ans += F[K][i];
		Ans %= MOD;
	}
}
int main()
{
	init();
	if (K==1)
		Ans=tot % MOD;
	else if (K>N)
		Ans=0;
	else
		dynamic();
	printf("%d\n",Ans);
	return 0;
}