起初也不知道這個題目還有乙個更為簡單易想的辦法,那就是記憶化的搜尋。
因為題目的基本意思就是要你匹配給你字串的所有長度的字首在字串當中所出現的次數,那麼這個時候我們可以設計乙個簡便的記憶方法。
設定乙個place來記錄每次新的字首長度所匹配的位置資訊。
例如 ababab這個字串
我們可以首先讓這個place資料
先匹配「a」字串,那麼匹配a的位置資訊就是
place=一共三次
然後匹配"ab"字串,只用在以前place的基礎上匹配後面跟的'b'就行,因為只有出現過'a'的位置才可能匹配"ab"字串,所以第二次匹配,place資料資訊為:
place=;一共匹配了三次,
這樣就可以輕易算出"a""ab"兩個字首的匹配次數,之後都是同樣的道理。
**如下:
view code
1 #include2using
namespace
std;
3int
main()
4 23}
24 total%=10007
; 25
for(int i=2;i<=len;i++)26
37}38 total%=10007;39
}40 printf("
%d\n
",total);
41}
42return
0;
43 }
hdu3336解題報告
題目大意 有乙個長度為n的字串,理所當然它有n個字首,問將這個n個字首都拿去匹配,會匹配出來多少個,總數模10007。解題思路 最簡單的應該就是a自動機,多模板匹配,其實這個題的字首樹是一條直線。還有一種,就是kmp演算法,不用完整的kmp演算法,在建立失配表的時候就要開始統計,因為建立失配表的時候...
記憶化搜尋解決揹包問題
為什麼要用二維陣列進行紀錄?記憶化最麻煩的還是記憶值的準確性 include include using namespace std struct noded 10000 long long n,m long long dp 1000 1000 一開始我直接使用的dp 1000000 以為將每個m對...
hdu 2446 二分搜尋解題報告
今天實在是有點蛋痛啊。開始複習一下二分搜尋的題目。其實這個知識點,很早之前就應該掌握的了。到現在才開始,有點小鬱悶啊。如果有意想要做二分的朋友,建議先去練練手,做一做2141 2199,都是不錯的練手二分題目。此題目的意思,相信大家應該都懂,就是拿炮彈來堆三角形,然後告訴你有多少個這樣的炮彈,你要告...