Description
对于排列(P1,P2,...,PN),定义(i,j)为逆序对当且仅当i < j且Pi > Pj。统计{1,2,...,N}的所有排列中,逆序对数量为M的排列数量。
Input
输入文件count.in第一行包含两个正整数N,M。
Output
输出文件count.out应包含一个整数,表示满足条件的排列数除以124567的余数。
Sample Input
3 1
Sample Output
2
分析:一开始我只想到暴力,然后发现比较慢,立刻打了一个表,30分(得分策略,不要吐槽)。然后有人告诉我有规律,然后看看表,还真有。公式为:
F[I,j]=f[i-1,j]+f[I,j-1] (i>j)
F[I,j]=f[i-1,j]+f[I,j-1]+f[i-1,j-i] (i<=j)
然后就呵呵啦。
程序:
const
maxn=1000;
p=124567;
var
f:array[-1..maxn,-1..maxn] of longint;
i,j,n,m,t,s:longint;
flag:boolean;
begin
readln(n,m);
f[1,0]:=1;
fori:=2 to n do
forj:=0 to m do
begin
ifi>j then f[i,j]:=(f[i-1,j]+f[i,j-1]) mod p
else f[i,j]:=(f[i-1,j]+f[i,j-1]-f[i-1,j-i]+p) mod p;
end;
write(f[n,m] mod p);
end.