Description
給定一個 \(2 \times n\) 的矩陣,每個位置上有一個小寫字母。
有一個長度為 \(k\) 的小寫字串 \(w\),詢問矩陣中有多少條有向路徑滿足以下條件:
- 路徑上的字母連起來恰好為 \(w\)。
- 不多次經過同一個位置。
- 只能向上下左右四個方向走。
\(n,k \le 2 \times 10^3\),答案對 \(10^9+7\) 取模。
Solution
注意到矩陣的寬只有 \(2\),所以最終的行走路線一定是這樣:
即兩邊為一個 U 形,中間為一個不走回頭路的路徑和兩邊的 U 形拼接起來。
不妨先考慮起點在終點左邊或者起點和終點在同一列並且起點先往左走的情況。
顯然可以 dp,設 \(f_{i,j,s}\) 表示目前走到 \((i,j)\),且匹配到了 \(w\) 的第 \(s\) 位的方案數,這個方案是考慮了左邊的 U + 不回頭路徑或者只有不回頭路徑的方案。
那麼如果 \((i,j)\) 右邊能找到一個長度為 \(k-s\) 的 U 就可以讓 \(f_{i,j,s}\) 更新答案。
實現時要注意不要算重。
時間複雜度:\(O(nk)\)。
Code