Shiritori

发布时间 2023-07-01 15:11:24作者: wscqwq

[ABC278F] Shiritori

首先想到单词只跟首尾有关,就只需要记录首尾了。

然后就想到了直接爆搜。

爆搜

发现赛时的数据水爆了,被赛后的数据卡了。

然后我考虑到可以用二进制表示 st,这样就可以避免掉枚举 \(1\sim n\),而只是枚举未选择的。

优化1

容易发现,极限数据加速了很多,但是还是过不去。

此时既然用了二进制状态,又有了上次结束的字母,那可以想到什么?

状态压缩!令 \(f[lst][state]\) 表示上个字母是 \(lst\),状态是 \(state\)(每一位的 \(1\) 表示未选,\(0\) 表示已选)。

状态数只有 \(26(2^N-1)\),完全可以过。

AC

发现优化力度还是相当大的。