题解:DP
f[i][j]表示1~i形成逆序对j对的方案数
转移用前缀和优化
O(nk)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1009;
const int mm=10000;
int n,m;
int f[maxn][maxn];
int sum[maxn][maxn];
int main(){
scanf("%d%d",&n,&m);
f[1][0]=1;
for(int i=2;i<=n;++i){
for(int j=m;j>=0;--j)sum[i-1][j]=(sum[i-1][j+1]+f[i-1][j])%mm;
for(int j=0;j<=m;++j){
int u=j;
int d=max(j-i+1,0);
f[i][j]=(sum[i-1][d]-sum[i-1][u+1]+mm)%mm;
}
}
cout<<f[n][m]<<endl;
return 0;
}