题目解析
状态压缩动态规划
定义 dp[i][mask][j]dp[i][mask][j]dp[i][mask][j] 为第 iii 位朋友,已经经过的站点集合为 maskmaskmask,此时位于车站 jjj 的可行性。
那么我们就可以对每一位朋友分开考虑,并使用状态压缩动态规划,在 O(KN22N)\mathrm{O}(KN^22^N)O(KN22N) 的时间复杂度内,计算出上述 DPDPDP 数组。
然后我们定义 turn[step][i]turn[step][i]turn[step][i] 表示,经过 stepstepstep 次移动,位于车站 iii 的朋友的集合。根据已经得出的 dpdpdp 数组,我们可以很容易计算出 turnturnturn 数组。
最后根据 turn[step][i]turn[step][i]turn[step][i] 中的存储的集合是否为所有朋友的全集,来判断,是否可以在站点 iii 汇合即可。
AC代码