题解:P11230 [CSP-J 2024] 接龙
思路
- 首先我们找出词库中所有的数字
1 作为可能的出发点。 - 因为限制了单词长度,所以接下来我们只能将可能的出发点后面
k−1 个数标记为可能的终止点。 - 我们开一个和词库一样大的动态数组
b ,若S_{i,j} 可能为出发点,就将a_{i,j+1} 赋值为k−1 ,按照a_{i,j}=\max(a_{i,j},a_{i,j−1}−1) 的转移方程,只要b_{i,j}>0 ,该点就可能成为终点。如果现在已经经历了x−1 轮循环并执行了以上操作,我们就可以将接龙长度为x 的问题全部解决掉了。 - 再次找出那些下一轮接龙的出发点。如果
x 在至少两个人的词库中作为可能的终止点出现,那么所有人的词库中的x 都可以作为下一轮的出发点;如果x 只在一个人的词库中出现,那么除这个人以外的其他人词库中的x 都可以作为下一轮的出发点。统计每一个数字成为终止点的次数,以及出现的位置。 - 这就算是一次完整的操作,我们继续回到操作
3 进行下一轮循环。重复执行\max r 次即可.