先分析所有游客的 $t=1$ 的情况,也就是考虑总共会转多少圈。由于每艘船最后需要水手从 $C\to A$ 拉回来,而这个水手可能是这次送出去的,可能是之前送出去的。于是,平均只能拉两个游客,一共就是 $\lceil\frac n2\rceil$ 圈。最终是 $\lceil \frac n2 \rceil$ 圈来分所有的游客,基础贡献即为 $3\lceil\frac{n}{2}\rceil$。
每组的贡献是:所有游客的 $t$ 的最大值减 $1$ 为 $A \to B$ 的额外贡献,所有到 $C$ 游客的 $t$ 的最大值减 $1$ 为 $B \to C$ 的额外贡献,这样不需要考虑全为水手的船。这样转化之后一组分组方案可以导出一组合法的方案。
进一步其实不需要管分组数量 $\leq\lceil\frac n2\rceil$ 的限制,按照 $t$ 从大到小考虑,当前没有组完的船一定是最多一艘有 $C$,最多一艘全 $B$。记录两个船的大小分别是 $b, c$,有 $\max(b,c)\leq 2$,并且 $(b + c) \bmod 3$ 固定,否则可以直接开走。时间复杂度 $O(n)$。
这个做法是可以支持动态增删的,状态数 $=3$ 可以直接 ddp。