题解: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; }