題目一:The Longest Prefix
題目大意:給出一組可以去匹配的字符串,求在給定的字符串中最長可以匹配出的前綴有多長?
算法1:DP
效率:O(200,000*200*10) (實際遠遠不到)
對於每個位置,去枚舉每個字符串,在除去這個串之後的前面的串可以匹配的情況下判斷對應的位時候可以匹配,只要有一個可以匹配該位就可以匹配。如果連續遇到不可匹配的數目大於最大可以匹配的長度的時候,就可以退出了。
小經驗:用scanf("%c", c)讀字符不能跳過回車符和空格
測試時間:
Test 1: TEST OK [0.000 secs, 3276 KB]
Test 2: TEST OK [0.000 secs, 3276 KB]
Test 3: TEST OK [0.011 secs, 3276 KB]
Test 4: TEST OK [0.022 secs, 3276 KB]
Test 5: TEST OK [0.022 secs, 3276 KB]
Test 6: TEST OK [0.054 secs, 3276 KB]
算法2:Trie(單詞查找樹)(這種算法好像當時一下子就寫出來了,但到現在才知道它的名字)
效率:O(200,000)
題目二:Cow Pedigrees
題目大意:求N個結點高度爲K的樹的種數
算法:DP
效率:O(NK)
s[i][j] = s[left][h]*s[right][j-1] + s[left][j-1]*s[right][h] + s[left][j-1]*s[right][j-1] 1<=h<=j-2,1<=left, right <i and left + right + 1 = i
優化:滿足這種條件的樹的節點數一定爲奇數;最大高度不會超過(N+1)/2;
題目三:Zero Sum
算法:DFS
注意:算的時候要從左向右算,從右向左算稍麻煩;
題目四:Money Systems
算法:DP 揹包
小知識:INT64在DEV-C++的g++編譯器中printf("%I64d",n),而在GNU中要寫成printf("%lld",n)
題目五:Controlling Company
算法:DFS/BFS
關鍵是要理解題目中的規則
(1)不解釋(2)不解釋(3)你的控制的公司稱爲子公司,則子公司的子公司仍然是你的公司,也受你的管轄
這道題實質是圖論的題目,可以用鄰接表來存貯,哪種搜索隨便了。第一條規則在搜索時意味着你先把自己作爲本體去拓展