序列计数(动态规划/自动机/前缀和优化)
生活随笔
收集整理的這篇文章主要介紹了
序列计数(动态规划/自动机/前缀和优化)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
序列計數
對于一個小寫字母的序列每次可以將相鄰兩個不同的小寫字母都變為二者之一,可以進行無限次這樣的操作,求解可以產生多少種不同的序列。
首先我們不能考慮操作,而是考慮合法序列,顯然最后會形成若干個區間,然后每個區間必然是對應了最初的一個位置,并且需要滿足位置的相對順序不變,所以問題等價于統計本質不同的滿足相鄰字符不同的子序列個數,然后利用組合數直接計算。
那么考慮動態規劃,如果采用求子序列個數的dp,發現無法很好處理相鄰字符不同,但是如果利用子序列自動機,就很好處理,這樣dpi,jdp_{i,j}dpi,j?表示當前匹配到i這個字符,然后長度為j的方案數,然后每次O(26)O(26)O(26)刷表法轉移,總復雜度O(26n2)O(26n^2)O(26n2)。
這個方法的核心思路就在于利用了自動機優化dp,處理一些難以處理的限制。
注意細節:
考慮正解,只是在原來的基礎上進行優化,發現使用填表法效率更高,每個點對應的轉移是一段區間,所以可以前綴和優化。
總結
以上是生活随笔為你收集整理的序列计数(动态规划/自动机/前缀和优化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓中世纪游戏(安卓中世纪)
- 下一篇: 方案计数(带修计数题/线段树)