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;
}