好吧。。这题好久之前做的了,拿出来再瞧一遍。
让求1-n数列的排列中 逆序对数量为k的 数列个数。
dp
状态转移从一半想比较好想。
在0-i-1中插入i 有可能造成 0-i-1个逆序对
所以f[i][j]=Σ(f[i-1][k])j-i+1=
#include<cstdio>
#include<algorithm>
#include<cstring>
//by mars_ch
using namespace std;
int n,d;
int dp[1001][1001];
int main()
{
scanf("%d%d",&n,&d);
dp[1][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=d;j++)
{
for(int k=0;k<i;k++)
{
if(j>=k)
dp[i][j]+=(dp[i-1][j-k])%10000;
}
}
}
printf("%d\n",dp[n][d]%10000);
return 0;
}