原创 【PAT Advanced Level】1045. Favorite Color Stripe (30)

這幾天在複習動態規劃(DP),故在pat上找了兩道dp的題目來練練手。 這一題看似跟動態規劃扯不上,其實是可以把它看做動態規劃問題——最長遞增子序列(LIS)問題的一個變形。 題目中給定的第一個數組a[n],就相當於給定了“遞增”的順序。

原创 【PAT Advanced Level】1020. Tree Traversals (25)

這題給定後序和中序遍歷的結點順序,要求層序遍歷的結點順序。 可以通過後序和中序構造出這棵樹,然後再BFS給出層序遍歷。構造的規則爲: 1. 找到後序遍歷的最後一個元素,這個元素肯定是整個樹的根。 2. 根據上面找到的元素,將中序遍歷的序列

原创 【PAT Advanced Level】1022. Digital Library (30)

這題其他沒什麼,就是輸入輸出比較麻煩,還怪自己太不熟練。 #include <iostream> #include <string> #include <vector> #include <algorithm> #include <fs

原创 【PAT Advanced Level】1017. Queueing at Bank (25)

先排序,然後模擬事件。簡單的模擬題。 #include <iostream> #include <vector> #include <algorithm> using namespace std; const int opened =

原创 求樹的“直徑”以及所想到的

算法導論22.2-7題:樹T=(V,E)的直徑(diameter)定義爲max(u,v),亦即,樹的直徑是樹中所有最短路徑長度中的最大值。試寫出計算樹的直徑的有效算法,並分析算法的運行時間。 如果這裏的樹T是簡單的二叉樹或者多叉樹,我們可

原创 【PAT Advanced Level】1018. Public Bike Management (30)

這題還是比較有難度的。題目中要紀錄的東西比較多,比較繁瑣。 這題我考慮先用Dijkstra算法計算單源最短路徑,在計算過程中紀錄每個點的最短路徑的前序(如果最短路徑有多條,每個前序都需要紀錄),然後再遞歸深搜出具有最少攜帶自行車數量的路徑

原创 算法導論22.2-6 好選手、壞選手

//算法導論22.2-6題 “好選手、差選手” //題意就是要判斷一個圖是否是二分圖 //二分圖又稱雙分圖、二部圖、偶圖,指頂點可以分成兩個不相交的集使得在同一個集內的頂點不相鄰(沒有共同邊)的圖。 //二分圖又稱作二部圖,是圖論中的一種

原创 STL中priority_queue的使用注意事項

今天在使用priority_queue寫一個算法的時候,總是報heap異常,查了很久,才知道原因。 我們知道優先級隊列的底層是用heap來實現的,每次push和pop操作後,都會調用heapify來調整最大堆得結構。 我們先來看看prio

原创 【PAT Advanced Level】1011. World Cup Betting (20)

簡單模擬題,遍歷一遍即可。考察輸入輸出。 #include <iostream> #include <string> #include <stdio.h> #include <iomanip> using namespace std;

原创 【PAT Advanced Level】1012. The Best Rank (25)

注意點:排名順序如果有並列,則往後延續比如1 1 1 4 5而不是1 1 1 2 3 每次排序後更新每個學生的最好排名情況。 #include <iostream> #include <vector> #include <string>

原创 trivial destructor

trivial理解爲無用的,無意義的; non-trivial自然就是有實際意義的 如果一個class沒有定義destructor,如果這個class中的一個數據成員擁有destructor,那麼編譯器會自動合成出這個class

原创 【PAT Advanced Level】1016. Phone Bills (25)

注意細心,簡單模擬題。 #include <iostream> #include <map> #include <vector> #include <string> #include <algorithm> #include <stdi

原创 【PAT Advanced Level】1021. Deepest Root (25)

這題分兩個步驟: 1. 求出圖中有幾個連通子圖 2. 如果只有一個連通圖,找出最長的路徑(圖的直徑) 我直接用了一個DFS求連通子圖的個數,其實更通用的方法是並查集。 找出最長路徑,我們進行了n次DFS,每次以一個節點作爲根節點。後來看了

原创 Strict Weak Ordering

Description A Strict Weak Ordering is a Binary Predicate that compares two objects, returning true if the first preced

原创 【PAT Advanced Level】1068. Find More Coins (30)

最近在學習動態規劃,PAT中的這一題就是一個典型的dp問題。 這一題和01揹包問題很類似,M相當於揹包問題中的揹包容量,硬幣面值相當於每件物品的重量,揹包問題中要求物品價值最大,這裏要求物品總重(面值和)等於M,從可選方案中選擇最優的是根