原创 單調隊列+STL deque

單調隊列=雙端隊列! 我們從最簡單的問題開始: 給定一個長度爲N的整數數列a(i),i=0,1,...,N-1和窗長度k. 要求:       f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,

原创 【圖染色】ZOJ 2066

很簡單,先根據每個人選擇情況建一個無向圖,然後標記染色,有相鄰邊的不能染成同種顏色! 原來標準時先對度排序,再染色。。。沒有排序都可以過,這種算法叫Welch Powell算法,自己加上度的排序吧~ 用Welch Powell 算法進行

原创 【DP求最大子矩陣面積】hdu 1506

求最大子矩陣面積其實就是求每個數左邊>=a[i]的下標,右邊>=a[i]的下標,然後就會求出面積了! #include <list> #include <map> #include <set> #include <queue> #incl

原创 【劃分樹】

劃分樹和歸併樹都是用線段樹作爲輔助的,原理是基於快排 和歸併排序 的。 劃分樹的建樹過程基本就是模擬快排過程,取一個已經排過序的區間中值,然後把小於中值的點放左邊,大於的放右邊。並且記錄d層第i個數之前(包括i)小於中值的放在左邊

原创 數據結構之【trie樹】

1、 概述 Trie樹,又稱字典樹,單詞查找樹或者前綴樹,是一種用於快速檢索的多叉樹結構,如英文字母的字典樹是一個26叉樹,數字的字典樹是一個10叉樹。 Trie一詞來自retrieve,發音爲/tri:/ “tree”,也有人讀爲/tr

原创 【博弈論】

推薦:wutianqi‘s blog 尋找平衡狀態(也稱必敗態,奇異局勢),(滿足:任意非平衡態經過一次操作可以變爲平衡態) (一)巴什博奕(Bash Game): 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取p個,最多取

原创 【揹包】

首先說下動態規劃,動態規劃這東西就和遞歸一樣,只能找局部關係,若想全部列出來,是很難的,比如漢諾塔。你可以說先把除最後一層的其他所有層都移動到2,再把最後一層移動到3,最後再把其餘的從2移動到3,這是一個直觀的關係,但是想列舉出來是很

原创 【矩陣運算+模板】

矩陣運算是屬於線性代數裏的一個重要內容,上學期學完後只覺得矩陣能解線性方程,不過高中的時候聽說過矩陣能優化常係數遞推以及將座標上的點作線性變換,於是找了些資料研究了一下,並把許多經典題以及HDU shǎ崽大牛總結的矩陣乘法的題目[1]、[

原创 STL【priority_queue】

priority_queue 在<queue>頭文件中,還定義了另一個非常有用的模板類priority_queue(優先隊列)。優先隊列與隊列的差別在於優先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優先權順序出隊(默認爲大者優先

原创 【快速排序】

快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部

原创 【轉】 三分法——求解凸性函數的極值問題——czyuan原創

二分法作爲分治中最常見的方法,適用於單調函數,逼近求解某點的值。但當函數是凸性函數時,二分法就無法適用,這時三分法就可以“大顯身手”~~ 如圖,類似二分的定義Left和Right,mid = (Left + Right) / 2,m

原创 【最大權二分匹配的KM算法】

轉自百度百科。 個人覺得關鍵是這句話:相等子圖的完備匹配一定是二分圖的最大權匹配。 KM算法是根據它來搞的! KM算法是基於匈牙利算法的。 具體參考cuitianyi的講解。 對於KM算法,除了求權和最大,還可以求權和最小以及求權積最大

原创 【歸併排序+實現】

歸併排序——O(n*logn) 歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每個子序列是有序的。然後再把有序子序列合併爲整體有序序列。 歸併排序是建立在歸併操作上的一種有效

原创 STL【Heap】

STL裏面的堆操作一般用到的只有4個。 他們就是 make_heap();、pop_heap();、push_heap();、sort_heap(); 他們的頭函數是include<algorithm> 首先是make_heap(); 他

原创 【約瑟夫模板】

具體可以以選猴王爲例 http://poj.grids.cn/practice/2746 這裏mark一下這個模板。 #include <iostream> using namespace std; int last[400][400]