社区讨论
站外题求助
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m6r8ni07
- 此快照首次捕获于
- 2025/02/05 09:37 去年
- 此快照最后确认于
- 2025/11/04 09:59 4 个月前
https://loj.ac/p/6077
给定 n, k,请求出长度为 n 的逆序对数恰好为 k 的排列的个数。答案对 10 ^ 9 + 7 取模。
1<=n,k<=100000
我有一个O(nk)的dp,怎么优化?
CPP#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;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...