字符串長度 ≤ 16。每步可刪除一個**回文子序列** (不要求連續)。求刪空整個串的最少步數。
狀態 mask (0~2^n-1) 表示已刪除的字符集合。目標從 0 到達 full = (1<pal[],然後 BFS 分層擴展。
bool isPal(int mask) {
string t;
for (int i=0;i>i&1) t += s[i];
for (int i=0,j=t.size()-1;i pal;
for (int mask=1; mask<1<
分層 BFS (比 DP 更快)
vector cur{0}, nxt;
vector vis(1<
優化細節
- n=16 時
pal 最大 ~幾千,BFS 狀態數 ≤ 2^16=65536,極快。
- 避免
memset 大數組導致 TLE,用 vector 或靜態數組 + 時間戳。
- 多測試用例時,每個 case 重新初始化。