统计

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.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值