AGC024E
如果在一个位置插入一个数,那么之后的字典序更大的要求,是插入位置之后第一个
设置
那么有转移:
初始状态
#include <bits/stdc++.h>
using namespace std;
const int maxn=305;
int n,k,mod;
int dp[maxn][maxn][maxn];
int main()
{
scanf("%d%d%d",&n,&k,&mod);
dp[0][1][0]=1;
for(int i=0;i<=n;i++)
for(int j=1;j<=k;j++)
for(int l=n;l>=0;l--)
if(dp[i][j][l])
{
if(l==0)
dp[i][j+1][i]=(dp[i][j+1][i]+dp[i][j][l])%mod;
else
dp[i][j][l-1]=(dp[i][j][l-1]+dp[i][j][l])%mod;
dp[i+1][j][l]=(dp[i+1][j][l]+1ll*dp[i][j][l]*(l+1)%mod)%mod;
}
printf("%d",dp[n][k][0]);
}