#include<bits/stdc++.h>
using namespace std;
int n,k,f[1001][1001],f2[1001][1001],sum[1001][1001];//f[i][j]表示长度为i的数列中有j组逆序对的数列个数
int main()
{
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)f[i][0]=sum[i][0]=f2[i][0]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=k;j++)
{
if(j-i>=0)f[i][j]=(sum[i-1][j]-sum[i-1][j-i]+10000)%10000;
else f[i][j]=sum[i-1][j]%10000;
sum[i][j]=(sum[i][j-1]+f[i][j])%10000;
/*for(int m=max(0,j-i+1);m<=j;m++)
f2[i][j]=(f2[i][j]+f2[i-1][m])%10000;*/
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
printf("%d ",f[i][j]);
cout<<endl;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
printf("%d ",sum[i][j]);
cout<<endl;
}
cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
printf("%d ",f2[i][j]);
cout<<endl;
}*/
printf("%d\n",sum[n][k]);
}
本来以为f是答案 sum是处理前缀和的 结果sum变成了答案 十分好奇这是为什么