Luogu
文章平均质量分 55
學習算法,紀錄luogu所學
ZustinLau
I am currently studying Economics at the Chinese University of Hong Kong and I am interested in data structure and algorithms.
展开
-
P6146 [USACO20FEB]Help Yourself G (計數問題)
題目定義了兩個東西.第一個是 併, 併是指所有被至少一個線段覆蓋的點的集合.第二個是複雜度, 複雜度是指這些並所形成的連通塊數目.如何理解複雜度呢?你可以想象為 一開始有兩條不想交的線段, 他們明顯沒有形成一個連通塊, 而他們兩個自己就是連通塊, 所以開始複雜度為2, 如果這個時候加入一條線段, 他跟其中一個線段相交了, 那麼他們就屬於一個連通塊了. 所以總共還是只有兩個連通塊.那麼如何求出n條線段所有子集的複雜度之和呢?每個線段本身就是一個子集.我們把所有線段按左端點排個序, 這樣我們可以一個一個線段 慢原创 2022-06-03 16:07:53 · 67 阅读 · 0 评论 -
P1896 [SCOI2005]互不侵犯
人生第一次的狀壓,大部分參考题解 P1896 [SCOI2005]互不侵犯 - 暗ざ之殇 的博客 - 洛谷博客這裡自己做一次總結。首先,棋盤上的每一個個字都可以選擇放或者不放,我們假如我們選擇放就會是1,不放就是0,那麼棋盤上的一行可以以 二進制的形式表示,我們可以認為一行的總可能性為2^n。既然有了可以紀錄每一行的狀態的方法,我們的dp 狀態就很好定義了。dp[i][j][k] 為第i行,放j個皇后的放置方法,的總方案數。由於二進制可以以10進制表示,所以上面的k就是只有j原创 2022-03-30 07:30:04 · 314 阅读 · 0 评论 -
P2657 [SCOI2009] windy 数
windy數 定義:1. 個位數是一個windy 數2. 每個相鄰的位數相差為2或以上(必須為整數差值),不存在00146這樣的前導0觀察定義2,我們知道位數的值影響我們的判斷,所以我們考慮 dp[i][j] 等於 i 位數為j的時候有多少windy數,你可以想像為 0 ~ j*10^(i-1) - 1有多少windy數。然後你會知道每個區間的windy數都是獨立的,他們符合加法律。所以 對於一個ABCD,我們可以把他拆解為 windy(A000) + windy(B000) + windy原创 2022-03-27 23:26:20 · 104 阅读 · 1 评论 -
P2602 [ZJOI2010]數字計數
0-9,0-99,0-999,0-9999 ........當中每一位數字出現的次數都是一樣的。f[i] 對於i位數的數字,每個數字出現的次數,f[i] = f[i - 1] * 10 + 10^(i - 1)但是這裡會有一個問題,就是前置0,因為對於上面的公式會把0001,0002,0003 當中出現的0也計算進0的出現次數中,所以最後我們要扣除這些前導0的出現次數。假設說我們已經知道不同位數不同數字的出現次數,我們可以把一個4位數看成ABCD, 我們可以輕易算出A000中不同數字的出現次原创 2022-03-27 04:09:42 · 304 阅读 · 0 评论 -
P2014 [CTSC1997] 选课
bagpack原创 2022-03-26 00:35:30 · 96 阅读 · 0 评论 -
P4290 [HAOI2008]玩具取名
說實話,在這一題學到非常多的東西,尤其是對區間型動態規劃有了更全面的掌握。整體的思路和普通的區間動態規劃差不多,左區間結果和右區間結果進行合併判斷。狀態設計就是某區間能否轉化成某英文字母。dp[i][j][k] = can interval [i : j] switch to k那麼現在就要涉及轉移問題了?首先,我們要有一個轉換表,表示為某兩個英文字可以轉為某個英文字,轉換表switching_list[al1][al2][al3] = al2 and al3 is able to原创 2022-03-24 03:06:50 · 94 阅读 · 0 评论 -
P3049 [USACO12MAR]Landscaping S
This question is a classical linear dp question.The trick to simplfy the question is to preprocess the question with a special discretized method.We can label the soil with its id and seperate the data just like below:original array : 1 4 5 6discre原创 2022-03-24 00:55:21 · 1010 阅读 · 0 评论 -
P1439 【模板】最长公共子序列
先從樸素的dp入手。最直接的狀態設計就是dp[i][j] = a的前i個元素和b的前j個元素所組成的LCS長度。兩種情況1. a[i] == b[i]2. a[i] != b[i]考慮情況1:a[i] 和 b[i] 一樣,那麼最優的情況必定是繼承圖片1中紅色圈圈的部分,再加上1。紅色圈圈其實就是i前的所有狀態中的最優值,他是一路傳過來的。考慮情況2:那不一樣的話,還是跟情況1一樣嗎? 由於不一樣你要考慮究竟用a 作為結尾和 b 作為結尾誰長一點,所以基本上我們的dp公式已原创 2022-03-21 08:48:26 · 83 阅读 · 0 评论 -
P1020 [NOIP1999 普及组] 導彈攔截
gg原创 2022-03-20 23:39:05 · 48 阅读 · 0 评论 -
P3865 【模板】ST 表
模板原创 2022-03-19 22:15:12 · 184 阅读 · 0 评论 -
P4053 [JSOI2007]建筑抢修
題目地址:[JSOI2007]建筑抢修 - 洛谷其實對於這一題可以使用貪心,而且很好證明正確性。假設維修所需時間是Si,限時是Ti。首先,我們對T進行排序,然後這個時候序列就有下面的特性了。假如T3的時候可以維修3個,也就是說 ,那好如果S4進來了,但是S1+S2+S3+S4卻大於T4,那麼我們是不是直接丟棄掉T4呢?其實不行,因為如果S4比起前面的如果小一點,那麼當然要把S4進行兌換,把耗時高一點的去掉。這裡就會出現一個問題,你這樣換能保證正確性嗎?絕對能。我們知道並...原创 2022-03-19 05:07:21 · 260 阅读 · 0 评论 -
SP1805 HISTOGRA - Largest Rectangle in a Histogram
題目地址:HISTOGRA - Largest Rectangle in a Histogram - 洛谷經典找最大子矩陣問題。對於一個陡峭不平的直方圖,每一個柱子都有不同的高度,透過觀察可以知道,如果兩根柱子組成的最大子矩陣他的高度必然不會超過較矮的矩陣高度。有了這個思維,就可以知道一旦遇到比當前柱子要矮的柱子,就要立馬進行結算,但是這裡有一個問題,就是如果前面的柱子也是陡峭不平的,那麼就算結算,顯然答案也是不對的。所以我們會想到利用單調棧,讓棧內元素保持升序,如果遇到比棧頂要小的元素就結原创 2022-03-18 08:25:35 · 241 阅读 · 0 评论 -
P4147 玉蟾宫
01矩陣找最大0子矩陣。題目地址:玉蟾宫 - 洛谷目录Catenary Method代碼流程初始化初始化最左初始化最右Core Part完整代碼Monotonic Stack代碼初始化Core Part完整代碼經典題目,可以用懸線法(catenary method)或者單調棧,對於所有懸線法可以解的題目,單調棧都可以解,所以不會開一個懸線法系列。Catenary Method我們對於每一橫都用兩個指針掃一遍,得到每一橫裡的每一個位置的.原创 2022-03-18 05:32:39 · 308 阅读 · 0 评论 -
P1823 [COI2007] Patrik 音樂會的等待
題目連結:[COI2007] Patrik 音乐会的等待 - 洛谷一開始看到題目有種逆序對的感覺,但題目說明中間若有比自己高的點就不算一對,這就不關逆序對的事情了。1. 中間不能有比自己高的人2. 相鄰兩個人可以算一對從這個特性我們知道,假設前面有k個人,他們的升高都是降序排好的,如果有一個人進來了,他比這k個人都大,那麼如果第k + 2個人進來,我們可以保證這k + 2個人都不能和這k個人湊成一對,因為第k+1個人比前k個人要高,這就是題目給的條件1。那這就挺適合用單調棧的了,我們保證原创 2022-03-17 19:41:10 · 149 阅读 · 0 评论 -
P1318 積水面積
這道題非常適合使用單調棧。題目地址:积水面积 - 洛谷首先,我們考慮遇到比自己高的柱子就進行結算,遇到比自己低的柱子就進行面積統計。那麼唯一的問題就是,如果我們當前的柱子就是最高的呢?那不就無法結算了嗎?問題哪裡來,就哪裡解決,我們把最後加入棧的柱子的index記下來,還有他的高度也記下來,因為他是我們最後結算的柱子,也就是說如果後面都沒有比他高的柱子,我們就會結算不了,所以我們就索性倒著再循環一遍,時間上也不會增加太多,確方便很多。那我們應該怎麼判斷沒有必要倒著再循環一遍呢?非常簡原创 2022-03-17 18:15:07 · 68 阅读 · 0 评论 -
AT1983 [AGC001E] BBQ Hard
這遍題解需要用到逆元,學習這個新知識用了兩三個小時。非常有意思的一道題,可以幫助自己拓展思維。首先,我們可以想像組合數的幾何意義。組合數從n + m 中選 n 個的組合數就是從(0,0)走到(n,m)座標的方案數。題目所給的 n 是 ai + bi,m 是 aj + bj。所以暴力的做法是,首先求得每一個點的組合數,然後求和。但是對於每一個點的組合數他顯然是要(n)^2 的處理時間,因為 n m 都是和i j 有關的,顯然是過不了的。那麼我現在考慮把上面的矩形平移到 ..原创 2022-03-13 16:30:19 · 354 阅读 · 0 评论 -
P1447 [NOI2010] 能量采集
題目給定n,m 意思為二維座標系上從( 0, 0 ) 到 ( n, m )範圍裡,任意( x, y ) 和(0 , 0 )連成一條直線,在這條直線上的點的數量,所帶來的能量損失,能量損失公式為 2 k + 1, 其中k為點的數量,並且k不包括(0, 0) (x, y)。題目分析,根據歐幾里德擴展算法中,我們能夠知道( 0, 0) 到 (x, y) 的直線上的整數點,就是gcd(x, y), 由於x y 和 0 0 不在考慮裡,所以直線上的點需要減2。為了公式好推一點,我們設n為較大那一個 m為小的。原创 2022-03-11 14:11:18 · 121 阅读 · 0 评论 -
P2568 GCD
P2568 GCD原创 2022-03-09 15:41:45 · 60 阅读 · 0 评论 -
P1966 [NOIP2013 提高组] 火柴排队
luogu P1966原创 2022-03-04 09:47:47 · 288 阅读 · 0 评论 -
P2345 [USACO04OPEN]MooFest G
當然題目的測試集很水,是可以暴力過的。那有沒有其他思路呢? 我們可以嘗試從簡化公式入手,看看能否降低時間消耗。對於Max而言,我們可以透過對v進行排序,一旦v是有序的,我們就可以知道Vi < Vj, where i < j那麼棘手的就剩下絕對值符號了。那有什麼辦法可以幫我們找出兩段區間內的大小關係呢?這裡可以試一下從歸併排序的理念出發。歸併排序怎麼幫助我們呢?他可以幫你把區間分成兩半,並且兩半都是服從升序關係的。並且最重要的是,我們是遞歸到底部再返..原创 2022-03-05 11:20:10 · 119 阅读 · 0 评论