https://loj.ac/p/6077
给定 n, k,请求出长度为 n 的逆序对数恰好为 k 的排列的个数。答案对 10 ^ 9 + 7 取模。
1<=n,k<=100000
我有一个O(nk)的dp,怎么优化?
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int f[5010][5010];
int n,k;
int main(){
scanf("%d%d",&n,&k);
f[1][0]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=k;j++) f[i-1][j]=(f[i-1][j]+f[i-1][j-1])%mod;
for(int j=0;j<i;j++) f[i][j]=f[i-1][j];
for(int j=i;j<=k;j++) f[i][j]=(f[i-1][j]-f[i-1][j-i]+mod)%mod;
}
printf("%d\n",f[n][k]);
return 0;
}