今天主要是做的单个题。
下次打模拟赛就是放假了。怕会有段时间没打手感下降/ll。
csp-J2024 D
dp。
f[i][j]表示,第i轮结束后,最终颜色是j的结束位置。
f[i][j] = -1:状态不能达到。
f[i][j] = 0 :可以在多个人处结束。(即有大于等于2个序列中的j颜色可以被转到)
f[i][j] = l :只有在第l个人处的j颜色能被转到。
考虑转移:第i轮时,枚举第r个序列中的位置j。当f[i - 1][a[j]] \neq -1 且 \neq r时,j后面的k个位置都可以作为结尾。
即f[i][[j + 1, j + k - 1]]都可以赋为r。
这里不用做区间赋值,而是维护当前这个位置和上一个满足条件位置的距离\leq k。
当f[r][c]为-1时,不能完成接龙,其余情况都可以。
这题难处理的其实是如何避免自己跟自己接龙,即避免在同一个序列中转移。自己想的方法就没考虑到这点。
赛时还真不一定做得出来。遗憾的。
这里记录f[i][j]只有一个时的情况就是为了避免这种情况。