站外题求助
  • 板块学术版
  • 楼主xyz123
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/5 09:35
  • 上次更新2025/2/5 13:39:09
查看原帖
站外题求助
379926
xyz123楼主2025/2/5 09:35

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;
}
2025/2/5 09:35
加载中...