正题
题目链接:https://www.luogu.org/problemnew/show/P2513
题目大意
求长度为nnn逆序对为kkk个的序列总数。
解题思路
设fi,jf_{i,j}fi,j表示1∼i1\sim i1∼i的排列逆序对个数为jjj
然后显然:fi,j=∑k=1i−1fi−1,j−kf_{i,j}=\sum_{k=1}^{i-1}f_{i-1,j-k}fi,j=k=1∑i−1fi−1,j−k
前缀和优化
codecodecodertf
#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,f[1100][1100];
int main()
{scanf("%d%d",&n,&k);f[1][0]=1;for(int i=2;i<=n;i++){for(int j=0;j<=k;j++)(f[i-1][j]+=f[i-1][j-1])%=10000;for(int j=0;j<=k;j++)f[i][j]=(f[i-1][j]-f[i-1][max(0,j-i+1)-1]+10000)%10000;}printf("%d",f[n][k]);
}