原创 搜索,打表,構造

常見的可以通過搜索,打表,構造進行的做法 1.我們經常會做一種 dp,也即是,詢問的方法數。 其中對於給定排序後,相同結果的dp值相同的情況下,我們可以考慮dfs. 原因就在於雖然總的情況很多,但是通過有效的分類,我們需要計算的東西並不多

原创 AC自動機及後綴自動機

ac自動機是一種基於trie樹的算法,其本質和kmp上的處理很相似。 trie樹結構:https://blog.csdn.net/qq_38890926/article/details/81158021 kmp轉移思路:https://b

原创 最優化算法-模擬退火(SA)

最優化問題 最優化問題,就是在解決問題的過程中,挑選最好的一種決策 全局最優 針對一定條件/環境下的一個問題/目標,若一項決策和所有解決該問題的決策相比是最優的,就可以被稱爲全局最優。 我們可以定義:在無限制環境集合R內,假設限制條件/環

原创 混沌神經網絡(Chaos Neural Network)

基本概念 吸引子:系統有朝着某個穩態發展的趨勢,這個穩態就叫做吸引子。吸引子又分爲平庸吸引子和奇異吸引子。 平庸吸引子:有不動點(平衡)、極限環(週期運動)和整數維環面(概週期運動)三種模式。(不動點:函數術語。函數經過有限次迭代回到相同

原创 樹鏈割分原理和實現

樹鏈割分即將樹分割成爲一段一段的線段區間,具體分割的過程就是一個dfs的過程,然後就可以將樹結構劃分爲數組結構,從而實現樹上的區間操作,即用線段樹或者樹狀數組處理。 首先就是一些必須知道的概念: 重結點:子樹結點數目最多的結點; 輕節點:

原创 MST(最小代價生成樹)

生成樹,即對圖的dfs過程中,我們會得到一棵生成樹,在所有不同的生成樹中,會存在一些邊上權值和最小的樹,我們叫其最小代價生成樹。 最小代價生成樹常見算法有兩種 prim  (點少) bool vis[maxn]; int cost[ma

原创 trie樹及其優化

trie樹,即字典樹,是一種基於多字符串匹配的數據結構,該結構由根開始向下走到底,其中由跟到葉節點的一條路徑組成了一個字符串。 其匹配的是到目標字符ch2位置,從ch2之前的某個字符ch1開始ch1....ch2爲一種目標字符串。 /

原创 子序列問題

1.上升子序列對數。  HDU - 4991 給定一個長度n的序列a,求出其中長度爲m的有序子序列對數,mod上123456789。(1<= n<=10000 ,1<=m<=100) 因爲在處理第i個數的時候,得到了之前i之前長度爲1-m

原创 tarjan 連通性

tarjan處理強連通分量 利用tarjan處理,處理過程中每次遇到 dfn[rt]==low[rt],即爲一個強連通塊。獲取color數組。 每個不同的color即表示該點屬於第幾個強連通分量。 vector<int> vec[max

原创 逆序對問題

逆序對是什麼,對於一個序列a1,a2,a3.....an來說,,,滿足a[ i ]>a[ j ]並且i < j的數對(i,j)就叫做逆序對。 一些性質: 1.對於一個逆序對爲k的序列來說,要將這個序列排序成爲完全沒有逆序對的序列,即任意兩

原创 數的分解

我們常常會對自然數進行分解,求取不同分解的組合數目或者對分解出的序列進行一系列操作。   各種分解方法中的k數出現次數: HDU - 4602 4 = 1 + 1 + 1 + 1          4 = 1 + 1 + 2       

原创 網絡流

最大流: 最大流是網絡流的一種,他表示從起始點s出發,引出無窮的流量,每條邊上允許通過一個最大的流量,求最終能夠到達目的地的最大流量是多少。 由於還是在圖上進行操作,因此最大流的求解方法依然是基於dfs或者bfs的做法。故網絡流比較耗費時

原创 匈牙利算法-最小點覆蓋

點覆蓋的概念定義:  對於圖G=(V,E)中的一個點覆蓋是一個集合S⊆V使得每一條邊至少有一個端點在S中。 即存在這樣一個集合s,集合中的點組成的行或者列的直線能夠將目標點全部包含在s中。 最小點覆蓋,即利用最少的行與列組成的直線數,使得

原创 樹上分治

在樹上進行分治的時候常常會選取一個點,通過該點將樹分隔成爲多個分支,在多個分支中進行分治,最終回到該點上處理各個分治之間的關係。 分治的關鍵步驟大概是:選點,分治,合併。 選點: 樹上分治的關鍵在於,通過分治可以將樹編程許多小的分支,從而

原创 迴文串/迴文序列

迴文串即,一個串反過來讀也是他本身的串就叫做迴文串。 迴文串的判定: bool isPalindrome(char *s) { int len=strlen(s); int l=0; int r=len-1;