原创 差和問題

剛剛把這道題A了,是之前比賽時沒做的題。看到隊友早已寫了一些博客,想起自己也該寫了,也正好是第一篇文章,本來很早便該寫的,想來不知是太懶還是什麼。 原題鏈接:http://www.51nod.com/contest/proble

原创 HDU 5592 ZYB's Premutation

題意是給你n個位置的值,每個值是由之前的逆序數和加上當前的逆序數的總和。然後這個逆序數序列需要由你自己構建,由1~n的排列組成。 我們會發現首先最後一個位置可以直接確定,設它爲a[i],a[i]=當前的位置值減去之前的位置值總和

原创 HDU2222Keywords Search

最近一直都在做字符串處理的問題,最近跟着kuangbin巨巨的鏈接做,特來加深下對自動機的理解。  題意:給n<=10000個長度不超過50的目標串和一個長度不超過1000000的模式串。 用模式串建立好自動機然後在模式串上搜索就好了

原创 HDU 3341 Lost's revenge

給定n個模式串和一個目標串,求將目標串重排列後所能包含的最多的模式串個數。可以開個dp[s][a][c][g][t]來記錄狀態轉移,s爲結點狀態,但是a,c,g,t的值範圍爲[0,40],很明顯數組爆了,於是有個很神奇的方法,可以利用狀態

原创 cf 218D

給出n-1條邊,dp[i]爲i爲根需改變的邊數使得i能到達任意一個點。 升序輸出最小的dp(i)的下標。 #include<stdio.h> #include<string.h> #include<iostream> #include<

原创 POJ 1625 Censored!

給定p個模式串,求長度爲m<=50的串中不包含任何模式串的串的種類數,字符僅由給出的n個字符構成,用mp數組標記下。然後和之前的幾道類似,利用end和next數組得到轉態轉移數組,然後由於題目數據不像之前的那麼大,可以用dp[i][j]來

原创 樹形DPpoj3162

題意給出n-1條邊,每個點有一個最遠距離,爲最長的一段區間,這個區間內的最遠距離最大值和最小值的差不超過m。 這道題我最先跑最遠距離用的是取子結點和父親節點過來的最大值的方法,但是一直超時,我想應該是用的vector存邊導致的吧(方便坑

原创 HDU 2457 DNA repair

給定n個模式串,一個目標串,求目標串修改最少多少次可以使其不包含任何模式串。用二維dp來求,主要是要構建出DFA,具體看之前的的poj2778裏的鏈接。然後就是判斷轉移時是否需要+1,和利用end數組判斷當前是否可以轉移。代碼如下 #i

原创 樹形DPhdu1502

題目描述:每個節點有權值,不能同時選擇相鄰的兩個節點,問最後選的最大價值。 貪心的想法是要不選子節點,要不選父親節點,可是有可能最優的是兩個節點都不選。 那麼就是類似01揹包選擇路線,來個dp[i][2],0表示不選,1表示選,那麼從

原创 樹形DPpoj2152

題目描述:有n個城鎮, 每個城鎮在D(i)距離內需要至少有一個消防站,在每個城鎮修建一個消防站需花費W(i),給出n個城市之間的網絡圖,問修建費用最少。主要還是看了陳啓峯大牛的論文才能弄懂。 做法:設dp(i)(j)爲 ①在以爲根的子

原创 HDU 2825 Wireless Password

給定m個模式串,求至少包含k個模式串長度爲n的目標串的種數MOD20090717。end數組記錄爲模式串下標的二進制數,然後利用狀態壓縮dp來求解,dp[i][j][k],i爲當前串長度,j爲當前結點狀態,s爲包含串狀態。最後答案爲dp[

原创 ZOJ 3228 Searching the String

給定一個模式串和n個目標串和對應的權值,當爲0時求目標串在模式串裏的出現次數(可重疊),當爲1是可重疊。主要還是利用fail指針進行判斷,當可重疊時直接累加end數組就可,不可重疊時需記錄當前串的長度l和之前匹配到的最大下標p,如果l+p

原创 HDU 3247 Resource Archiver

給n個源串和m個病毒串,求包含所有源串但不包含任何病毒串的串的最短長度。利用源串和病毒串建立自動機,當爲源串時end記錄下標,病毒串時end標記爲-1,然後在跑bfs時如果當前節點的fail指向節點的end爲-1時,當前節點也需標記爲-1

原创 manacher

最平常的算法是O(n^3)暴力枚舉的。O(n^2)的是從中開始枚舉,對奇數串和偶數串分別處理。而manacher採取了增加字符的方式避開了奇偶的討論,而且達到了理論的下界O(n)的時間複雜度。設mx爲字符串能往右延伸的最大點,id爲最大點

原创 KMP

KMP算法是用來解決兩個字符串匹配的十分神奇的O(n)算法。最主要的在於對於目標串的處理,有一個名爲next的數組,得到的是字符當前點的後綴和字符的前綴能匹配相等的最大值。用O(n)求出。然後當對模式串進行匹配時用next數組進行轉移,模