思路:
一眼看去好像第二类斯特林数啊,但打了个表发现不是
其实怎么证明我也不太会
但打表后我们得到了一个递推式:
dp[i][j]=dp[i-1][j-1]+dp[i-j][j];
二维递推即可
代码:
#include<iostream> #include<cstdio> #define rii register int i #define rij register int j #define p 998244353 using namespace std; long long dp[5005][5005],n,k; int main() { scanf("%d%d",&n,&k); dp[1][1]=1; for(rii=2;i<=n;i++) { for(rij=1;j<=i;j++) { dp[i][j]=dp[i-1][j-1]+dp[i-j][j]; dp[i][j]%=p; } } cout<<dp[n][k]; }