原创 PAT甲級1007 Maximum Subsequence Sum (25 分)題解

\quad這是最大子序列和問題,是一個典型的動態規劃題目,我在博客中對幾個常見的動態規劃算法進行了分析。設輸入的數保存在數組a[max]中,那麼轉移方程爲dp[i]=max(dp[i-1]+a[i],a[i])。最大子序列和即爲

原创 算法分析與設計(一)——時間複雜度

一、P,NP和NPC問題 P:能在多項式時間複雜度內解決 NP:能在多項式時間複雜度檢查進行驗證 NPC:已經證明的,無法在多項式時間複雜度內解決 啓發式算法 近似算法 暴搜 參數算法 如何評價算法優劣? 簡潔易懂 效率高(

原创 矩陣理論之線性代數基礎(一)

一、線性空間和子空間的基本概念 數域:對加減乘除運算封閉,包含0,1的所有數稱爲數域。 線性空間:設V是一個非空集合,P是一個數域,在V中定義了一種代數運算加法,使得對於V中任意兩元α,β\alpha,\betaα,β,在V中都有

原创 PAT甲級1087 All Roads Lead to Rome (30 分)題解

\quad這個題需要考慮很多因素,第一要求是找出花費最少的路,同時統計這些路的條數;第二要求是在花費相同情況下找出happy值最高的路,第三要求是在花費和happy值都相同的情況下找出平均happy值最高的路,即經過最少的站點。

原创 PAT甲級1111 Online Map (30 分)題解

\quad這個題較爲繁雜,分爲兩部分,第一部分是以最短路徑爲第一標尺,時間花費爲第二標尺記錄路徑和最短距離。第二部分以最少時間花費爲第一標尺,經過站點數目最少爲第二標尺記錄路徑和最短時間。我將路徑保存在stack中,這樣分別計算

原创 PAT圖論刷題總結

\quadPAT圖論是一大考點,主要集中在圖遍歷(DFS,BFS,連通分量)和最短路兩個部分,還有一些圖的新定義題(歐拉回路,哈密爾頓圈之類的),這類題很簡單。但圖最短路有些題較爲複雜,需要較強的編碼功底。 1、圖遍歷和連通分量

原创 PAT甲級1072 Gas Station (30 分)題解

\quad這個題要求每個加油站到所有居住地的最短距離,最長距離和平均距離。其中最長距離用於判斷該加油站位置是否符合要求,最短距離和平均距離需要輸出並保留一位小數。我用1到N表示居民居住地,N+1到N+M+1表示加油站,這樣計算出

原创 求圖中兩點間的所有的最短路徑

一、理論篇 \quad如下圖所示,是一個有7個頂點的圖,每條邊權值均爲1,試問從點0點6,有多少條最短路徑呢,分別是什麼? \quad我們可以直觀的看出來,一共有4條最短路徑,分別是 0->1->4->6 0->2->4->6

原创 PAT甲級 1018 Public Bike Management (30 分) 題解

\quad這個題目的是要我們能記錄所有的最短路徑,在這些路徑中選擇符合題目的那一種輸出。我用vector<int> pre[maxn]數組記錄符合最短路時節點的前驅節點,用Dijistra獲得這個數組。最後用DFS對pre數組進

原创 PAT甲級1021 Deepest Root (25 分)題解

\quad這個題暴力也可以過,我試過枚舉每一個點開始進行dfs,記錄從這個點開始到其他節點的最大深度和對應的節點,記錄下來,相互比較得到答案,時間需要1000ms,題目給的限制是2000ms,完全夠。 \quad正確解法是從樹任

原创 PAT甲級1013 Battle Over Cities (25 分)題解

\quad這個題目在於求圖連通分量個數,我們從任一頂點開始對圖進行dfs並記錄哪些點被訪問,在沒有被訪問過的點中繼續選出任一頂點開始dfs,知道所有點都被訪問,進行dfs的次數即爲圖連通分量個數。題目難點在於在某個點被去除的時候

原创 PAT甲級1076 Forwards on Weibo (30 分)題解

\quad這個一個標準的圖BFS的過程,從圖中給定的一個頂點u開始,記錄與u距離(層數)不超過L的頂點個數,用隊列模擬BFS即可。 #include <iostream> #include <vector> #include <

原创 PAT甲級1034 Head of a Gang (30 分)題解

\quad這個題雖然只是圖的遍歷問題,但寫程序要求較高,幾點需要注意 給出的人員姓名不是數字是字符串,需要建立姓名到索引和索引到姓名的映射,方便建圖和後續處理 需要記錄每個人通話總時間,團隊通話總時間就是該團隊內所有人通話時間

原创 PAT甲級1030 Travel Plan (30 分)題解

\quad這個題是一道最短路題,跟PAT甲級1003 Emergency (25 分)題解很像,即在求最短路的前提下,若有多條最短路,輸出花費最少的一條。PAT最愛考這種題,因爲花費最少滿足最優子結構,我們可以直接在Dijist

原创 PAT甲級1003 Emergency (25 分)題解

\quad這是一個最短路的題,但要求多了一些,要求我們統計最短路條數,若有多條最短路,需要輸出能獲得營救隊伍最多的值。故需要我們在最憂子結構裏面更新兩個變量。我用num[v]表示起點s到點v最短路徑的條數,res[v]表示起點s