考虑直接把答案作为状态进行DP(递推)
f[i][j]表示1~i产生j个逆序对数的可能有多少种。
对于第i个数,显然他比1~i之间的数都要大,所以容易得出状态转移方程:
f[i][j]=sum(f[i-1][k])
然后就好了。。
上代码(好短)
#include<cstdio>
using namespace std;
const int MOD=10000;
int f[2000][2000];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
f[1][0]=1;
for(int i=2;i<=n;i++)
for(int j=0;j<=m;j++)
for(int k=0;k<=i-1;k++)
f[i][j]=(f[i][j]+f[i-1][j-k])%MOD;
printf("%d",f[n][m]);
return 0;
}