NC212475. 排列
描述
输入描述
读入 n 和 k
输出描述
输出概率。
示例1
输入:
1 0
输出:
1
示例2
输入:
100 100
输出:
545068381
C++ 解法, 执行用时: 617ms, 内存消耗: 249896K, 提交时间: 2021-06-18 16:52:46
#include<bits/stdc++.h> #define mod 998244353 using namespace std; int f[505][505][505]; int n,k; int ksm(int x,int y){ int res=1; while(y){ if(y&1) res=1ll*res*x%mod; x=1ll*x*x%mod,y/=2; } return res; } int main(){ scanf("%d %d",&n,&k); f[1][1][0]=1; for(int i=2;i<=n;i++){ for(int j=1;j<=i;j++){ for(int l=0;l<=k;l++){ if(l+i-j<=k) (f[i][j][l+i-j]+=f[i-1][j-1][l])%=mod; if(l+i-j-1<=k) (f[i][j][l+i-j-1]+=(f[i-1][i-1][l]+mod-f[i-1][j-1][l])%mod)%=mod; } } for(int l=0;l<=k;l++){ for(int j=2;j<=i;j++) (f[i][j][l]+=f[i][j-1][l])%=mod; } } printf("%d\n",ksm(f[n][n][k],mod-2)); return 0; }