比赛 HAOI2009 模拟试题3 评测结果 AAAAAAAAAA
题目名称 诸侯安置 最终得分 100
用户昵称 LXYXYNT 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2009-04-23 09:43:29
显示代码纯文本
const
  inf='empire.in';
  ouf='empire.out';
  maxn=200;
var
  dp:array[1..maxn,1..maxn] of longint;
  i,j,k,n,l,s:longint;

function change(p:longint):longint;
begin
  if odd(p) then exit(p)
            else exit(p-1);
end;

begin
  assign(input,inf);reset(input);
  assign(output,ouf);rewrite(output);
  readln(n,k);
  if k=0 then
  begin
    writeln(1);
    close(output);
    halt;
  end;
  if k>=2*n-1 then
  begin
    writeln(0);
    close(output);
    halt;
  end;
  for i:=1 to 2*n-1 do
   if odd(i) then dp[i,1]:=i
             else dp[i,1]:=i-1;
  for i:=1 to 2*n-1 do
   for j:=2 to i do
    for l:=1 to i-j+1 do
     dp[i,j]:=(dp[i,j]+dp[i-l,j-1]*(change(i)-j+1)) mod 504;
  i:=2*n-1;
  if k=1 then
  begin
    writeln((i*(i+1) div 2-i div 2) mod 504);
    close(output);
    halt;
  end else
  for i:=k to 2*n-1 do inc(s,dp[i,k]);
  writeln(s mod 504);
  close(input);
  close(output);
end.