HDU 2841 Visible Trees:容斥原理求網格可見樹木數
HDU 2841 Visible Trees:容斥原理求網格可見樹木數 在 n × m 網格(座標 (1,1) 到 (n,m))每個格點種一棵樹,觀察者站在 (
HDU 4135 Co-prime:容斥原理求區間互質數個數
HDU 4135 Co-prime:容斥原理求區間互質數個數 給定 a, b, n(1 ≤ a ≤ b ≤ 10¹⁸, n ≤ 10⁹),求區間 [a, b]
HDU 4464 Browsing History:ASCII 碼求和水題詳解
HDU 4464 Browsing History:ASCII 碼求和水題詳解 題目極簡:每個測試案例給 n 個域名(僅含小寫字母與 .),求 ASCII 碼總
算術表達式轉換:中綴轉前綴/後綴的棧模擬完整指南
算術表達式轉換:中綴轉前綴/後綴的棧模擬完整指南 SDUTOJ 2484 要求將輸入的中綴表達式(以 # 結尾)轉換為前綴、中綴(去括號)、後綴三種形式。本文系
最長公共子序列(LCS)動態規劃完整解析與 C++ 實現
最長公共子序列(LCS)動態規劃完整解析與 C++ 實現 給定兩個序列 X、Y,尋找最長子序列(不要求連續)使其同時出現在兩序列中。經典 DP 解法:O(|X|
矩陣鏈乘法:備忘錄法(自頂向下遞歸)完整實現與解析
矩陣鏈乘法:備忘錄法(自頂向下遞歸)完整實現與解析 給定 n 個矩陣 A₁…Aₙ,維度由陣列 p[0…n] 給出(Aᵢ 為 p[i-1] × p[i]),求完全
C++ 多重繼承指針轉換深度解析:內存佈局與 dynamic_cast 原理
C++ 多重繼承指針轉換深度解析:內存佈局與 dynamic_cast 原理 多重繼承下的指針轉換是 C++ 最易踩坑的領域之一。本文通過實測代碼,揭示 派生類
LeetCode Add Binary:二進制字符串相加的高效 C++ 實現
LeetCode Add Binary:二進制字符串相加的高效 C++ 實現 給定兩個二進制字符串 a、b,返回它們的和(同為二進制字符串)。例如 11 + 1
HDU 2159 FATE:二維費用完全背包詳解
HDU 2159 FATE:二維費用完全背包詳解 經典背包變體:主角需在 忍耐度 m 與 殺怪上限 s 兩重約束下,通過擊殺怪物(無限供給)獲取經驗值,目標是達
C++ 遞歸實現全排列:從原理到代碼完整解析
C++ 遞歸實現全排列:從原理到代碼完整解析 全排列是經典的遞歸入門問題:給定 n 個互不相同的元素,輸出所有可能的排列順序。本文通過模板函數實現通用型全排列,
POJ 3204 最大流:關鍵邊判定與流量增強策略
POJ 3204 最大流:關鍵邊判定與流量增強策略 在網路流問題中,判斷哪些邊的容量增加能夠提升整體最大流量是一個經典且實用的課題。POJ 3204 正是圍繞這
POJ 2184 Cow Exhibition:負權值 01 背包技巧
POJ 2184 Cow Exhibition - 智慧+趣味雙屬性 01 背包 N ≤ 100 头牛,智慧 S_i、趣味 F_i(均可為負,[-1000,10
ZZUOJ 1196 單調數:DP 計數遞增/遞減數
ZZUOJ 1196 - 計算 < 10^n 的單調數個數(遞增+遞減-重複) 遞增數:每位 ≤ 右邊位(如 112, 4557)。遞減數:每位 ≥ 右邊位(如
POJ 2519 Dropping Tests:二分答案 + 貪心判定
POJ 2519 - 刪除 k 個測試後最大化平均分:二分法 n 門測試,第 i 門得分 a_i,滿分 b_i。刪除 k 門後,最大化累積平均 Σa / Σb。
HDU 2845 Beans:二維 DP 分解為兩次一維 DP
HDU 2845 Beans - 矩陣選數無相鄰,兩次 1D DP 解決 M×N 矩陣(M*N ≤ 200,000),選擇若干格子,任意兩選格不共邊(上下左右)
HDU 3466 Proud Merchants:01 背包 + 貪心排序
HDU 3466 - 01 背包變種:購買門檻限制 N 個商品,價格 P_i,最低購買金額 Q_i(持有金額 ≥ Q_i 才能買),價值 V_i。初始資金 M。
C++ delete 與內存洩露:虛析構函數的必要性
C++ 基類指針刪除派生對象:必須用虛析構函數 基類指針指向派生對象,delete 時若基類析構函數非虛,只會調用基類析構,導致派生類資源未釋放(內存洩露)。
NYOJ 32 組合數:DFS 遞增構造逆字典序輸出
NYOJ 32 - 從 1..n 中選 r 個數,逆字典序輸出所有組合 n < 10, r ≤ n。每個組合內數字從大到小,組合間按逆字典序(即字典序從大到小)