dp题目一道。
设男生为1,女生为-1
显然当前缀和最大最小是会不符合要求
所以得到状态
F[I][J][K][L]表示放了i个男生,j个女生,且这段人的后缀中男孩与女孩的个数之差最大值为k,女孩与男孩的个数之差最大值为l的方案总数。
于是我们枚举当前位置放男生还是女生,方程自己YY一下。
可以状压压掉一维。
uses math;
var
f,g:array [0..155,-25..5,-5..25] of longint;
n,m,p,i,j,k,l,ans:longint;
begin
read(n,m,p);
f[0,0,0]:=1;
for i:=1 to n+m do
begin
fillchar(g,sizeof(g),0);
for j:=max(0,i-m-1) to min(i-1,n) do
for k:=-p to 0 do
for l:=k to k+p do
begin
g[j+1,min(2*j-i+2,k),max(2*j-i+2,l)]:=(g[j+1,min(2*j-i+2,k),max(2*j-i+2,l)]+f[j,k,l]) mod 12345678;
g[j,min(2*j-i,k),max(2*j-i,l)]:=(g[j,min(2*j-i,k),max(2*j-i,l)]+f[j,k,l]) mod 12345678;
end;
f:=g;
end;
ans:=0;
for i:=-p to 0 do
for j:=i to i+p do ans:=(ans+f[n,i,j]) mod 12345678;
write(ans);
end.