status
date
slug
tags
category
type
password
icon
目錄
Ch00. 前言Ch01. Recursiond001. P-1-1. 合成函數(1)d002. Q-1-2. 合成函數(2)d003. P-1-3. 棍子中點切割d004. Q-1-4. 支點切割d005. Q-1-5. 二維黑白影像編碼d006. P-1-7. 子集合乘積d007. Q-1-8. 子集合的和d008. Q-1-10. 最多得分的皇后d009. Q-1-11. 刪除矩形邊界Ch02. Sort & Binary Searchd010. P-2-1. 不同的數d011. P-2-2. 離散化d012. P-2-3. 快速冪d013. Q-2-4. 快速冪 2d014. Q-2-5. 快速計算費式數列第 n 項d015. P-2-6. Two-Number problemd016. Q-2-7. 互補團隊d017. Q-2-8. 模逆元d018. P-2-9. 子集合乘積d019. Q-2-10. 子集合的和d020. P-2-11. 最接近的區間和d021. Q-2-12. 最接近的子矩陣和d022. Q-2-13. 無理數的快速冪d023. Q-2-14. 水槽d024. P-2-15. 圓環出口Ch03. Queue & Stackd025. P-3-1. 樹的高度與根d026. P-3-2. 括弧配對d027. Q-3-3. 加減乘除d028. P-3-4. 最接近的高人d029. Q-3-5. 帶著板凳排雞排的高人d030. P-3-6. 砍樹d031. P-3-7. 正整數序列之最接近的區間和d032. P-3-8. 固定長度區間的最大區段差d033. P-3-9. 最多色彩帶d034. P-3-10. 全彩彩帶d035. Q-3-11. 最長的相異色彩帶d036. Q-3-12. 完美彩帶d037. Q-3-13. X差值範圍內的最大Y差值d038. Q-3-14. 線性函數Ch04. Greedy & Line Sweepingd042. P-4-1. 少林寺的代幣d043. P-4-2. 笑傲江湖之三戰d044. P-4-3. 十年磨一劍d045. P-4-4. 幾場華山論劍d046. P-4-5. 嵩山磨劍坊的問題d047. Q-4-6. 少林寺的自動寄物櫃d048. P-4-7. 岳不群的併派問題d053. Q-4-8. 先到先服務d049. P-4-9. 基地台d054. Q-4-10. 恢復能量的白雲熊膽丸d050. P-4-11. 線段聯集d051. P-4-12. 一次買賣d052. P-4-13. 最大連續子陣列d055. P-4-14. 控制點d056. P-4-15. 最靠近的一對d057. Q-4-16. 賺錢與罰款d058. Q-4-17. 死線高手d059. Q-4-18. 少林寺的櫃姐d060. Q-4-19. 五嶽盟主的會議場所d061. Q-4-20. 監看華山練功場Ch05. Divide & Conquerd064. P-5-4. 反序數量d065. P-5-7. 大樓外牆廣告Ch06. Dynamic Programmingd066. P-6-1. 小朋友上樓梯最小成本d067. P-6-2. 不連續的表演酬勞d068. P-6-3. 最小監控鄰居的成本d072. Q-6-4. 闖關二選一d073. Q-6-5. 二維最大子矩陣d069. P-6-6. 方格棋盤路線d070. P-6-7. LCSd074. Q-6-8. Local alignmentd071. P-6-9. 大賣場免費大搬家d075. Q-6-10. 置物櫃出租d076. P-6-11. Catalan numberd084. Q-6-12. 楊鐵心做 1 休 Kd077. P-6-13. 周伯通的基地台d085. Q-6-14. K 次買賣d078. P-6-15. 一覽衆山小d118. P-6-16. 山寨華山論劍d079. P-6-17. 切棍子d086. Q-6-18. 矩陣乘法鏈d080. P-6-19. 階梯數字d081. P-6-20. Hyper-cube pathd082. P-6-21. 刪除邊界d083. P-6-22. 文無第一武無第二d087. Q-6-23. 直升機抓寶d088. Q-6-24. 隔離採礦d089. Q-6-25. 貨郎問題Ch07. Graphd090. P-7-1. 探索距離d091. P-7-2. 開車蒐集寶物d092. P-7-3. 機器人走棋盤d093. P-7-4. 方格棋盤的最少轉彎數路線d094. Q-7-5. 闖關路線d095. P-7-6. DAG 的最長與最短路徑d099. Q-7-7. AOV 最早完工時間d100. Q-7-8. 小寶的著色問題d096. P-7-9. 最短路徑d097. P-7-10. 挖坑跳d101. Q-7-11. 紅白彩帶d098. P-7-12. 最小生成樹

Ch00. 前言

Ref

廢話

此文章並非為官方題解,僅是將我個人刷題的過程記錄下來,因此若有任何錯誤或令你不解的地方歡迎來信指教或幫我寫
由於 AP325 官方教材已提供例題(P)的詳解,因此通常 P 的註解會比 Q 少,若想更好的掌握該題知識,仍需以教材所撰寫的內容為主。
另外並非是每題都有筆記,太簡單的題目請直接吞服程式碼,若有不適可搭配適當分量的溫水。
最後提醒,AP325 教材所預設的閱讀對象是有一定程式基礎的初學者,因此我並不建議你將這份題單作為第一份題單。
 
裙子無法掩蓋傷疤,功勳戒指也無法遮蔽黑暗。 我想表達的是,苦難不應該被歌頌。 我們不該歌頌苦難,值得歌頌的是經歷苦難卻仍然掙扎著前行的人。

Ch01. Recursion

d001. P-1-1. 合成函數(1)

  • Version 1
    • Version 2

      d002. Q-1-2. 合成函數(2)

      • Version 1
        • Version 2

          d003. P-1-3. 棍子中點切割

          d004. Q-1-4. 支點切割

          關於兩次前後綴和的詳解

          為什麼求兩次前後綴和就能找到最佳切點?


          這個問題的核心在於如何高效地計算數列的「加權和不平衡度」,並找到使這個值最小的切割點。讓我們來一步步拆解這個過程。

          1. 問題目標

          給定一個數列 ,我們想找到一個最佳切割點 ,使得 的值 最小
          這代表的是:
          • 數字 的影響力由 來衡量
            • 距離 越遠,對總不平衡度影響越大。
          • 最佳 需要讓左右部分的總影響力盡可能相等

          2. 直接計算的問題

          如果直接暴力計算:
          • 對於每個 (候選切點),我們需要計算
          • 這樣的計算是
          • 如果要對所有可能的 都計算一遍,時間複雜度會是 ,這對於 來說太耗時。

          3. 透過前後綴和來快速計算

          為了加速這個計算,我們預處理兩組前綴和:
          • :區間 的總和
          • :區間 的總和
          接著,我們定義”前綴加權和”和”後綴加權和”:
          這兩個陣列的核心作用是 快速計算每個 的不平衡度
          其中:
          • 左側不平衡度:
          • 右側不平衡度:
          這樣,我們只要遍歷 一次 ),就能快速計算所有 的不平衡度,從而找到最佳切割點。

          4. 具體計算流程

          假設我們有數列:
          1. 計算
            1. 計算
              1. 尋找最佳切割點
                  • 對每個 ,計算
                  • 找到 最小的 組合,即為最佳切割點。

              5. 為什麼這樣做可以找出最佳切點?

              透過
              • 代表 左側區間的影響力
              • 代表 右側區間的影響力
              • 當這兩個值相近時,左右影響力相等,切割點最平衡!
              我們只需要一次遍歷( )就能高效計算所有 的影響力,從而找出最佳切割點,避免暴力計算的 時間複雜度。

              6. 時間複雜度

              • 計算前綴和
              • 計算前綴加權和
              • 尋找最佳切割點
              • 總共 時間內完成切割點的搜尋,比原本 快。

              d005. Q-1-5. 二維黑白影像編碼

              d006. P-1-7. 子集合乘積

              d007. Q-1-8. 子集合的和

              • backtracking 窮舉

              d008. Q-1-10. 最多得分的皇后

              • 就是 N Queen(?
              • 使用一個 vector 來記錄之前每個 row 放置的皇后 col,讓斜向判斷比較好寫

              d009. Q-1-11. 刪除矩形邊界

              • 模擬

              Ch02. Sort & Binary Search

              d010. P-2-1. 不同的數

              d011. P-2-2. 離散化

              d012. P-2-3. 快速冪

              d013. Q-2-4. 快速冪 2

              • 超大數 ⇒ string
              • 將大數切開,一位一位處理,再用10的冪次乘上去,不斷取模才不會 overflow

              d014. Q-2-5. 快速計算費式數列第 n 項

              • 對上述矩陣做快速冪,最後左上角的元素即為
              • 扁平化成一維 vector 比較好寫

              d015. P-2-6. Two-Number problem

              d016. Q-2-7. 互補團隊

              • 用 bitmask 去重
              • 如果用 XOR 還是需要 ,會吃 TLE
              • 直接排序後往後做二分搜,複雜度是

              d017. Q-2-8. 模逆元

              • 費馬小定理: 當模數 為質數時,任意非 倍數的整數 的模逆元為

              d018. P-2-9. 子集合乘積

              • 直接窮舉 鐵吃 TLE
              • 折半枚舉,往另外一個集合搜模逆元,將複雜度降到

              d019. Q-2-10. 子集合的和

              d020. P-2-11. 最接近的區間和

              • 維護前綴和集合,在其中搜尋最接近 的結果

              d021. Q-2-12. 最接近的子矩陣和

              • 對矩陣的行列求前綴和,扁平化成一維陣列,轉換成 d20 求解。

              d022. Q-2-13. 無理數的快速冪

              • 有理數部分:
              • 無理數部分:
              • 剩下的就是快速冪

              d023. Q-2-14. 水槽

              官方教材提示
              • 如果區間只剩一個水槽,該水槽高度=水量,結束
              • 否則,在區間中找出最高的隔板,假設此隔板高度為 。區間被此隔板分成左右兩邊,考慮下面三種情形:
                  1. ,水量足以讓兩邊都至少 ,區間內所有水槽高度皆是相同的平均值,結束。
                  1. 水量不足以越過輸入這一邊,那麼,另外一邊一定不會有水,縮小區間遞迴呼叫。
                  1. 水量會越過輸入這一邊,那麼,輸入這一邊的水槽高度一定都是 H,把水量扣掉後遞迴呼叫另外一邊。
              • 跟著提示遞迴下去就對了

              d024. P-2-15. 圓環出口

              • 將整個陣列複製一份拼在後面 ⇒ 維護前綴和 ⇒ 往後二分搜

              Ch03. Queue & Stack

              d025. P-3-1. 樹的高度與根

              d026. P-3-2. 括弧配對

              d027. Q-3-3. 加減乘除

              • Version 1
                • Version 2
                  • 順便附上 Python 版(?

                    d028. P-3-4. 最接近的高人

                    • Monotonic Stack

                    d029. Q-3-5. 帶著板凳排雞排的高人

                    • 用 vector 維護 monotonic sequence,因為單調性可以直接二分搜

                    d030. P-3-6. 砍樹

                    d031. P-3-7. 正整數序列之最接近的區間和

                    • Sliding Window

                    d032. P-3-8. 固定長度區間的最大區段差

                    • Monotonic Queue

                    d033. P-3-9. 最多色彩帶

                    • 針對整個區間做計數太浪費時間,只在 element 進入與離開 window 時做計數更新與判斷

                    d034. P-3-10. 全彩彩帶

                    d035. Q-3-11. 最長的相異色彩帶

                    d036. Q-3-12. 完美彩帶

                    d037. Q-3-13. X差值範圍內的最大Y差值

                    • 排序後將距離已經超出的點從比較的範圍中移除

                    d038. Q-3-14. 線性函數

                    • 凸包優化,保持單調性
                    • 二分搜
                    詳解看這邊

                    程式碼詳解

                    步驟 1:輸入 & 排序

                    • 依據 斜率 遞增排序,若 相同則依據截距 遞增排序。
                    • 這樣能確保同一斜率時只保留截距較大的直線,其他的直線永遠無法成為 的最大值,因為

                    步驟 2:建構上凸包

                    1. 去除冗餘直線
                        • 如果新的直線斜率與最後一條直線相同,則刪除舊的(因為它的截距 更小)。
                    1. 維護凸包
                        • 若新加入的直線與當前最後一條直線的交點不單調遞增,則刪除最後一條直線,直到恢復單調性。
                    1. 儲存交點
                        • 每當有新的直線加入,計算與前一條直線的交點 ,並存入

                    步驟 3:快速查詢

                    1. 二分搜尋
                        • 找到 對應的區間,確保我們選擇的 的最大值。
                    1. 計算
                        • ,累加進

                    Ch04. Greedy & Line Sweeping

                    d042. P-4-1. 少林寺的代幣

                    • 大硬幣可以換成小硬幣 ⇒ 不存在小硬幣可以支付而大硬幣不能支付的情況
                    • 選大硬幣與小硬幣都可以的情況下,選大硬幣的數量更少

                    d043. P-4-2. 笑傲江湖之三戰

                    • 只挑最方戰力最低的挑戰

                    d044. P-4-3. 十年磨一劍

                    • idx 越小,權重越大(會被乘到更多次) ⇒ 從小到大排序
                    • 要用 Long Long 才不會 overflow

                    d045. P-4-4. 幾場華山論劍

                    • Earliest Deadline First

                    d046. P-4-5. 嵩山磨劍坊的問題

                    • 按照 從小到大排序

                    d047. Q-4-6. 少林寺的自動寄物櫃

                    • 這題用 double 算比值會 overflow,改用交叉相乘比大小的方式排序

                    d048. P-4-7. 岳不群的併派問題

                    • 越早合併的數字會被算到越多次 ⇒ 小的先合併

                    d053. Q-4-8. 先到先服務

                    • 用 pq 的大小模擬櫃台的數量

                    d049. P-4-9. 基地台

                    • 二分搜

                    d054. Q-4-10. 恢復能量的白雲熊膽丸

                    • 二分搜

                    d050. P-4-11. 線段聯集

                    • 將有重疊的線段合併,確定沒有重疊的線段再計算長度

                    d051. P-4-12. 一次買賣

                    • 記錄過去最低的價格,更新最大可以獲得的利益

                    d052. P-4-13. 最大連續子陣列

                    • 保證區間內的總和為正數,否則只會讓後續的總和變小 ⇒ 不如不取

                    d055. P-4-14. 控制點

                    • 依照 x 座標排序,再對 y 座標維護 monotonic stack

                    d056. P-4-15. 最靠近的一對

                    • 這題用教材給的作法最後兩個測資會吃 TLE,不知道為啥==
                    • 逐漸縮小搜尋的範圍

                    d057. Q-4-16. 賺錢與罰款

                    • Shortest Job First

                    d058. Q-4-17. 死線高手

                    • Earliest Deadline First
                    • 小師妹最後還是跟林平之跑了QQ

                    d059. Q-4-18. 少林寺的櫃姐

                    • d053 加上二分搜
                    • 這題要注意的是不要真的創建 個櫃台(pq 的大小),會很久==
                    • 只需要創建 個櫃檯就夠了

                    d060. Q-4-19. 五嶽盟主的會議場所

                    • Line Sweeping 問題,筆記可參考這邊

                    d061. Q-4-20. 監看華山練功場

                    • 不斷更新最遠可以覆蓋到的時間點,每次延長就將計數器加一

                    Ch05. Divide & Conquer

                    d064. P-5-4. 反序數量

                    • 其實就是 Merge Sort

                    d065. P-5-7. 大樓外牆廣告

                    • Merge Version
                      • 跑兩次 monotonic stack

                        Ch06. Dynamic Programming

                        d066. P-6-1. 小朋友上樓梯最小成本

                        • 定義 為從第 0 階踩到第 階時,需要耗費的最小成本
                        • 階只可能來自第 階或第
                        • 可得出轉移式

                        d067. P-6-2. 不連續的表演酬勞

                        • 定義 為從第 0 天到第 天最大的酬勞
                        • 天的最大酬勞是 天表演或是 天和第 天都表演
                        • 可得出轉移式

                        d068. P-6-3. 最小監控鄰居的成本

                        • 要額外處理

                        d072. Q-6-4. 闖關二選一

                        d073. Q-6-5. 二維最大子矩陣

                        • 跟 d052 類似的作法

                        d069. P-6-6. 方格棋盤路線

                        • 每一格的狀態只能來自上方的格子或是左邊的格子

                        d070. P-6-7. LCS

                        • 經典 LCS
                          • 將 LCS 轉成 LIS 問題,用 的複雜度求解

                            d074. Q-6-8. Local alignment

                            • 定義狀態 的最大分數
                            • 如果 ,跟 LCS 一樣從前一個狀態轉移過來並加上分數
                            • 否則:
                              • 放棄之前的狀態,從 開始重新計算(如果是 Global Alignment 就沒有這個情況) ⇒ 0
                              • 選擇讓 不同 ⇒
                              • 選擇 空白 ⇒
                              • 選擇 空白 ⇒
                            • 可得出下列轉移式:

                            d071. P-6-9. 大賣場免費大搬家

                            • 01 背包問題,筆記可參考這邊

                            d075. Q-6-10. 置物櫃出租

                            • 就是 01 背包

                            d076. P-6-11. Catalan number

                            • memorization dp

                            d084. Q-6-12. 楊鐵心做 1 休 K

                            • 就是 d067

                            d077. P-6-13. 周伯通的基地台

                            • d068 加上 Monotonic Queue 維護區間最小值

                            d085. Q-6-14. K 次買賣

                            • 股票買賣問題,筆記見這邊
                            • Version
                              • Version

                                d078. P-6-15. 一覽衆山小

                                • 就是 LIS
                                這題跑 會TLE
                                • 的定義改成目前最長的 LIS ,再加上二分搜,變成

                                d118. P-6-16. 山寨華山論劍

                                d079. P-6-17. 切棍子

                                • 區間 dp

                                d086. Q-6-18. 矩陣乘法鏈

                                • 跟 d079 一樣的區間 dp

                                d080. P-6-19. 階梯數字

                                • 數位 dp

                                d081. P-6-20. Hyper-cube path

                                d082. P-6-21. 刪除邊界

                                d083. P-6-22. 文無第一武無第二

                                d087. Q-6-23. 直升機抓寶

                                d088. Q-6-24. 隔離採礦

                                 

                                d089. Q-6-25. 貨郎問題

                                • TSP 問題

                                Ch07. Graph

                                d090. P-7-1. 探索距離

                                • BFS

                                d091. P-7-2. 開車蒐集寶物

                                • DFS

                                d092. P-7-3. 機器人走棋盤

                                d093. P-7-4. 方格棋盤的最少轉彎數路線

                                • 把轉彎當作走一步,每次都直接走到底

                                d094. Q-7-5. 闖關路線

                                • Level Order BFS

                                d095. P-7-6. DAG 的最長與最短路徑

                                • Topological Sort

                                d099. Q-7-7. AOV 最早完工時間

                                • Topological Sort → 找出最早開始與結束時間 → 找出最晚開始與結束時間 → 如果最早開始時間等於最晚開始即 critical jobs

                                d100. Q-7-8. 小寶的著色問題

                                • 檢查是否為二分圖

                                d096. P-7-9. 最短路徑

                                • Dijkstra

                                d097. P-7-10. 挖坑跳

                                d101. Q-7-11. 紅白彩帶

                                d098. P-7-12. 最小生成樹

                                • Kruskal
                                 
                                還好我退了 新訓篇復活魔法
                                Loading...
                                Zixu
                                Zixu
                                Welcome to my webstie.
                                Analytics
                                Post Count:
                                226
                                Latest posts
                                碧藍之海
                                2025/09/26
                                還好我退了 新訓篇
                                2025/09/25
                                AP325 隨筆
                                2025/09/24
                                復活魔法
                                2025/09/16
                                還好我退了 部隊篇
                                2025/09/14
                                學院生存指南
                                2025/09/06