原创 優先隊列Dijkstra實現最短路算法

1. 優先隊列採用STL中的priority_queue,用法如下: #include <queue> using namespace std; struct Node { int id; int dis; }; bool opera

原创 sicily 1763傳球遊戲

題目描述: 遊戲規則是這樣的:n個同學站成一個圓圈,其中的一個同學手裏拿着一個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的一個(左右任意),當老師再次吹哨子時,傳球停止   問:有多少種不同的傳球方法可以使

原创 Poj1465 Multiple(BFS+餘數判重)

題意:給定一個自然數N,以及M個不同的數字X1,X2,...Xm,求N的最小正整數倍數,滿足這個數的每個數字都是M個數字中的其中一個 算法:對於給定兩個數A,B,如果A和B模N都相同,設爲C,即: A=x*N+C B=y*N+C 那麼如果

原创 KMP匹配算法詳解

     假如,A="abababaababacb",B="ababacb",我們來看看KMP是怎麼工作的。我們用兩個指針i和j分別表示,A[i-j+ 1..i]與B[1..j]完全相等。也就是說,i是不斷增加的,隨着i的增加j相應地變化

原创 放蘋果問題的遞推思路

1. 組合數的遞推C(n,m)=C(n-1,m-1)+C(n-1,m) 表示選擇或者不選擇第一個數...   2. 有n個相同的蘋果,m個相同的盤子,把n個蘋果放入m個盤子且不允許有盤子是空的,問有多少種不同的放法 D(n,m)=D(n-

原创 組合數計算技巧

C(n,m)=C(n-1,m-1)+C(n-1,m) 設想第一個數在或不在所選的範圍裏面即可...

原创 rmp算法詳細介紹&&poj3264

RMQ(Range Minimum/Maximum Query)問題:RMQ問題是給定一個區間,求這個區間中的最大或最小值的問題 RMQ採用動態規劃的思想來求解:(st算法:Square Table): 預處理:預處理使用DP的思想,f(

原创 Sicily 1047 Super Snooker

題意:給定A,B兩個數以及連續的N個數,問能否把這連續的N個數分別分配給A和B,使得分完之後A和B相等 解法: 1. 首先如果A和B之差,正好等於N個數之和,那明顯可以 2. 考慮N是偶數的情況,就是能把這N個數分成相同個數的兩堆    

原创 關於歐拉函數及Sicily1085的解法

1. 數論中的歐拉函數複習 F(x): 1~x中與x互質的數的個數,稱爲歐拉函數 歐拉函數是積性函數,即F(x*y)=F(x)*F(y),如果x和y互質 另外:F(x)=x-1,如果x是素數 F(xp)=xp-xp-1=xp-1*(x-1

原创 樹的Prufer 編碼和最小生成樹計數

1. 一棵標號樹的Pufer編碼規則如下:找到標號最小的葉子節點,輸出與它相鄰的節點到prufer 序列, 將該葉子節點刪去,反覆操作,直至剩餘2個節點。   2. 由Pufer編碼生成樹:任何一個prufer 序列可以唯一對應到一棵有標

原创 poj2479_簡單動態規劃

題意:給定一個序列,在這個序列中任取不相交的兩段,使得和最大,求最大和 解法:對於每個位置i,保留從開頭到該位置能找到最大連續段的和,方法爲從前往後掃,保留最大段tmp,和一個能加到位置i的最大數sum,如果sum+A[i]>tmp,則t

原创 關於 sicily1556 Finding Seats

題目描述: 給定一個矩形座位表的行數和列數,在一個矩形座位表中找到一個含有給定個空位的矩形 ,使它面積最小例如3 5 5 ...XX .X.XX XX...  答案是6   解法: 首先用int seatnum[305][305]表示從左

原创 poj2378_樹型DP

題目大意:給定一棵樹的n個節點和n-1條邊,對於每個節點,要求去掉它之後所有子樹的最大節點數,並輸出最大節點數小於n/2的節點編號 算法:用樹型dp實現,對於每個節點,保留包含該點的子樹的節點數son,並且保留去掉改點後的最大子樹的節點數

原创 卡特蘭數及其應用

令h(1)=1,h(0)=1,catalan數滿足遞歸式: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2) 該遞推關係的解爲:h(n)=C(2n,n)/(n+1) (n=

原创 sicily 1888循環隊列的最大子段和

題意:求一個循環隊列的最大子段和 算法:首先當作不循環的,用dp方法求出最大子段和,然後求出第二個數以後的不循環的最小子段和,看前者和total-後者誰更大,即可 代碼如下: #include <iostream> using names