日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hdu 3962(AC自动机+矩阵优化dp)

發布時間:2025/3/16 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 3962(AC自动机+矩阵优化dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載標記處:http://blog.csdn.net/woshi250hua/article/details/7599472


題目大意給定m個DNA病毒序列,求堿基構成的長度為n且含有兩個以上DNA病毒序列,結果對10007取模。


解題思路:本題代碼量大,較為綜合,需用到AC自動機改造而成的Trie圖、DP思想、矩陣快速冪。

? ? ?如果n比較小,那么本題可以用DP解,由于題目明顯的有三個狀態,未含病毒串、含一個病毒串,含兩個及兩個以上病毒,根據這三個就可以寫出一個狀態轉移方程。但是本題可以簡化一下,先求出總的組合種數,再減去含有一個病毒串和未含病毒串的種數就是解了。那么狀態就只有2個。

? ? ?狀態轉移方程為:if (j->next 為病毒串) ? ? ? ?dp[i+1][j->next][1] += dp[i][j][0] ;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else if (j->next非病毒串) ? dp[i+1][j->next][1] ?+= dp[i][j][1];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dp[i+1][j->next][0] += dp[i][j][0];

? ??但是本題n特別大,必須用矩陣進行優化。先將Trie圖轉化為一個(total * 2) * (total * 2)(total為總節點數)可達矩陣,如果i ?< total,那說明這個節點和他的后綴不含有病毒串,如果i > total,那說明這個節點和他的后綴含有1個病毒串。

? ? 具體實現是這樣的,if (i->next->flag) matrix[i][i->next+total]++;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else matrix[i][i->next]++,matrix[i+total][i->next+total]++;

? ? ?這樣,矩陣就被分成四塊相當于四個象限,第2個象限(i和j都小于total)怎么走都不會出現病毒串,那么經過A^n,他們的值就是最后病毒序列為0個的種數。第1個象限表示i走到j-total會出現一個病毒DNA序列,第四個象限i-total走到j-total,原來含1個病毒串現在還是1個。



這里的矩陣優化dp確實做得很巧妙,實際上矩陣優化dp只能夠處理一維和二維的狀態,在二維的情況下,dp[i][]只能夠與dp[i-1][]有關。如果大于二維,比如本題的情況,就想辦法分解成二維的,以本題為例,第三維的狀態只有0和1兩種可能,我們實際上是把第二維擴大了1倍,得到的是一個(2*tot)*(2*tot)的狀態矩陣,這樣就可以表示出第三維的狀態了。剩下的就是按照原來的狀態轉移方程來填矩陣的系數了。

這道題讓我想起了上一道DNA Sequence,也是AC自動機+矩陣,現在再來看這道題,其實也就是先列出狀態轉移方程,再構造的優化矩陣。

總結

以上是生活随笔為你收集整理的hdu 3962(AC自动机+矩阵优化dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。