CF1515E 题解
yuzhechuan · · 题解
类比CEOI kangaroo一题的插入思想,有一种
令
转移有 新建段,段扩增,段合并 共五种情况
注意由于两段间的距离是不确定的,所以怎么插都是可以的,转移系数见代码
const int N=405;
int n,f[N][N],mod;
signed main(){
read(n);read(mod);
f[0][0]=1;
for(int i=0;i<n;i++) for(int j=0;j<=i;j++){
f[i+1][j+1]=(f[i+1][j+1]+f[i][j]*(j+1))%mod; //j+1个间隔选一个插
f[i+1][j]=(f[i+1][j]+f[i][j]*j*2)%mod; //两端贴着开
f[i+2][j]=(f[i+2][j]+f[i][j]*j*2)%mod; //两端隔一个开
if(j>=2){
f[i+2][j-1]=(f[i+2][j-1]+f[i][j]*(j-1)*2)%mod; //定两段间距离为2,有正反两种开法
f[i+3][j-1]=(f[i+3][j-1]+f[i][j]*(j-1))%mod; //定两段间距离为3,开中间那个
}
}
write(f[n][1]);
}