关于题解中一个 dp 的更好实现
查看原帖
关于题解中一个 dp 的更好实现
365021
masterhuang楼主2024/4/20 21:44

设 fn,mf_{n,m} 表示长度为 nn 的序列(注意不是环),填了 mm 个 11,没有长度 ≥c\ge c 的连续 11 子段的方案数。

考虑最后一位填了 0/10/1:

  • 填 00:fn,m←fn−1,mf_{n,m}\gets f_{n-1,m}

  • 填 11:考虑要减去在 nn 处恰好不满足的方案数,即序列为:⋯0111⋯1\cdots0111\cdots1,最后 cc 个 11,于是转移为:fn,m←fn−1,m−1−fi−c−1,j−cf_{n,m}\gets f_{n-1,m-1}-f_{i-c-1,j-c}。注意 Corner Case:有可能第一个 00 对应的是序列的第 00 位置,此时应有:fc,c=0f_{c,c}=0。

f[0][0]=1;
for(int i=1;i<=n;i++) for(int j=0;j<=i;j++)
{
	f[i][j]=md(f[i-1][j]+(j?f[i-1][j-1]:0));
	if(i==c){if(j==c) f[i][j]--;}
	else if(i>c&&j>=c) f[i][j]=md(f[i][j]+mod-f[i-c-1][j-c]);
}
2024/4/20 21:44
加载中...