HDU 1081 To The Max:二維最大子矩陣和與 Kadane 演算法擴展
題目大意 給定 N×N 矩陣(N ≤ 100),元素為整數(可正可負),求任意子矩陣(連續行、連續列)的最大元素和。 降維思想:二維 → 一維 枚舉上邊界 t
狀態模式 C++ 實現詳解:封裝狀態轉移與行為變化的設計模式實戰
模式動機 當對象行為隨內部狀態頻繁變化,且狀態轉移邏輯複雜時,若在類中用大量 if/else 或 switch 判斷狀態,會導致代碼膨脹、難維護、違反開閉原則。
LeetCode Partition List 解題報告:鏈表分區與原地重排技巧
題目大意 給定鏈表頭節點 head 和值 x,將鏈表重排使所有 <x 的節點在前,≥x 的節點在後,保持兩部分內部相對順序。要求原地操作,O(1) 額外空
UVA 10635 Prince and Princess:最長公共子序列與動態規劃優化
題目大意 給定兩個排列 A、B(長度 n ≤ 10000,元素 1..n 各一次),求最長公共子序列(LCS)長度。等價於:在 A 中找最長遞增子序列(LIS)
C++ 介面設計原則:易於正確使用,難於誤用
核心思想 良好的介面設計應讓正確用法成為最自然、最簡單的選擇,而將錯誤用法阻擋在編譯期或透過資源管理機制自動避免。經典案例是工廠函數回傳原始指標 vs 智慧指標
破解編程面試:查找文本中兩個單詞的最短距離
問題描述 給定一個包含大量單詞的文本文件,以及任意兩個單詞,要求找出它們在文件中出現位置的最短距離(以單詞數計算)。如果對同一文件需要重複查詢多對單詞,如何優化
C++ 虛繼承構造/析構順序:虛基類優先、按聲明序、反序析構
繼承結構範例 class ZooAnimal { ... }; // 虛基類 class Bear : virtual public Zoo
UVA 112 Tree Summing:括號表示樹的遞歸構建與路徑和查詢
題目 輸入目標和 S 及一棵二叉樹的括號表示法 (先序,空節點為 `()`),判斷是否存在根到葉路徑和等於 S。多測試用例。 括號表示法解析 格式:(valu
VC++ 6.0 入門:建立控制台專案、編譯、連結、執行全流程
建立專案步驟 菜單 File → New,選 Projects 標籤,選 Win32 Console Application,輸入專案名與路徑,確定。 精靈選
UVA 10755 Garbage Heap:三維最大子陣列和 (前綴和 + Kadane)
題目 A×B×C 三維陣列 (A,B,C ≤ 20),元素值絕對值 ≤ 2^31。求非空子長方體最大元素和。 降維思想 固定前兩維區間 [x1,x2] × [
POJ 1837 Balance:01 背包變體 DP 計算平衡方案數
題目 天平兩臂長 15,C 個掛鉤位置 (整數 -15..15,非 0),G 個砝碼 (重量 1..25 互不相同)。每個砝碼必須掛在某個鉤上,求天平平衡的方案
LeetCode 42. Trapping Rain Water:四種解法全解析
題目 給定非負整數數組 height 代表柱狀圖高度,寬度均為 1,計算能接多少雨水。 方法一:雙向預計算最高柱 (O(n) 時間 O(n) 空間) int
UVA 705 Slash Maze:網格放大 3 倍 + DFS 找環
題目 M×N 網格,/ 與 \ 代表牆壁。牆壁將平面分割成若干區域,求封閉區域 (環) 的數量及最大環的周長 (以原網格邊長為單位)。w,h ≤ 75。 核心
ZOJ 1004 Anagrams by Stack:棧排列 DFS 字典序輸出
題目
給定入棧序列與出棧序列 (長度相同,字符唯一),輸出所有合法的棧操作序列 (i=push, o=pop),按字典序 (i
UVA 10535 Shooter:激光射擊牆壁的角度掃描與區間重疊
題目 二維平面上有 n 梵牆 (線段),射手位於 (x,y) 點,發射一條射線,求最多能擊穿多少牆壁。n ≤ 500,100 測試用例,5 秒時限。 幾何轉化
求十進制數二進制中 1 的個數:位運算技巧
方法一:Brian Kernighan 算法 利用 n & (n-1) 消除最低位的 1。循環直到 n 為 0,計數即為 1 的個數。 int count_on
C/C++ 不透明指針:隱藏結構體定義的標準做法
動機 庫開發中需向用戶隱藏內部結構體細節 (如 libvlc_instance_t),僅暴露不完整類型指針,實現封裝與 ABI 穩定。 實現步驟 (Windo