提高組
文章平均质量分 54
ZustinLau
I am currently studying Economics at the Chinese University of Hong Kong and I am interested in data structure and algorithms.
展开
-
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 · 103 阅读 · 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 评论 -
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 6 discre原创 2022-03-24 00:55:21 · 1009 阅读 · 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 评论 -
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 · 238 阅读 · 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 · 148 阅读 · 0 评论