原创 洛谷P4302 [SCOI2003]字符串摺疊——題解

題目傳送門 題目大意: 看題面吧。 思考過程&具體做法: 用記憶話搜索的方法,dp[l][r]表示l到r這一段能縮成的最短長度,遞歸地處理自身縮、分成兩段分別縮的情況,具體的實現請參考代碼。 代碼: #include <

原创 洛谷P2506 [SCOI2008]劣質編碼——題解

題目傳送門 題目大意: 給定n個01字符串,試問能由這些字符串以三種方式構成的最短字符串長度爲多少。 思考過程&具體做法: 神DP,看題解纔會的。 首先我們考慮二維的情況(也就是隻要求能有兩種構成方式),令dp[i][j

原创 洛谷P4467 [SCOI2007]k短路——題解

題目傳送門 題目大意: 求一個圖中起點到終點的簡單路中的第k短路,以長度爲第一關鍵字,經過城市的字典序爲第二關鍵字。 思考過程: 我們肯定是無法把所有的情況都求出來再排個序解決的,所以只能估計每條路徑的長度,儘量早地求出前

原创 洛谷P4036 [JSOI2008]火星人——題解

題目傳送門 題目大意: 寫一個數據結構,需要支持三種操作: 1.單點修改一個字符 2.單點插入一個字符 3.詢問兩個後綴的LCQ 思考過程: 一開始想到的是後綴數組,但是後綴數組似乎不支持插入的操作。那麼能夠在小於l

原创 洛谷P4050 [JSOI2007]麻將——題解

題目傳送門 題目大意: 看題面吧。 思考過程&具體做法: 看起來很高級的一個題目,但其實做法是赤裸裸的暴力,暴力枚舉每一張聽牌然後暴力檢驗即可。 代碼: #include <bits/stdc++.h> using na

原创 洛谷P4289 [HAOI2008]移動玩具——題解

題目傳送門 題目大意: 有一個4*4的方格,有些格子放有玩具,每次可以將任意兩個格子互換,問從起始狀態到目標狀態最少需要多少步。 思考過程&具體做法: 直接跑bfs,對每個圖狀壓記錄狀態判重就行了。 代碼: #inclu

原创 洛谷P2325 [SCOI2005]王室聯邦——題解

題目傳送門 題目大意: 題面說得很清楚了。 思考過程: 其實這個題很奇怪,既沒要求最多可能分多少個省,又沒要求城市數最多的省的城市數最小是多少,所以有很多種做法。 具體做法: 從1開始做dfs,對所有點維護一個棧,第一

原创 洛谷P2475 [SCOI2008]斜堆——題解

題目傳送門 題目大意: 看題面吧。 思考過程&具體做法: 當前插入的是極左沒有右兒子的節點,也就是一直往左走直至一個沒有右兒子的點停止,然後刪掉他交換父節點的左右兒子,這樣做是符合的,但爲什麼最優不會證2333。 代碼:

原创 洛谷P2476 [SCOI2008]着色方案——題解

題目傳送門 題目大意: 有k種顏色的油漆,每種只能塗一定次數,所有加起來剛好能塗滿,相鄰的不能塗相同的顏色,求方案數。 思考過程: 我們發現這題的c值非常小,最大才5,於是可以用五維來暴力記錄狀態,再加上記錄上一次塗的顏色

原创 洛谷P4201 [NOI2008]設計路線——題解

題目傳送門 題目大意: 給定一棵樹,你可以在上面指定一些不相交的鏈,試問從每個節點到根經過的非鏈邊最多的最小值是多少。 思考過程&具體做法: 看別人的題解艱難地寫出來的。 首先impossible很好判斷,圖不聯通直接輸

原创 洛谷P4290 [HAOI2008]玩具取名——題解

題目傳送門 題目大意: 看題面吧。 思考過程&具體做法: 我們用1,2,3,4分別表示W,I,N,G四個字母,用布爾數組dp[i][j][k]表示從i到j是否能用k來表示,w[i][1],w[i][2],w[i][3]表示

原创 洛谷P1477 [NOI2008]假面舞會——題解

題目傳送門 思考過程: 很容易發現,收集的信息共有兩種情況: 1.成環 2.成鏈 對於第一種情況,我們dfs遍歷整個圖,第一次到達每個點時給一個id,若後來的路再次通向這個點,abs(id-newid)就是這個環的大小,

原创 洛谷P2272 [ZJOI2007]最大半連通子圖——題解

題目傳送門 題目大意: 題面說得很清楚了。 思考過程: 很容易可以發現,若想使節點數最多,在同一個強連通分量內的所有點一定是同時取的,所以我們可以先將這個圖縮點成爲DAG,而最大半聯通子圖也就是這個圖中最長的一條鏈,在DA

原创 洛谷P1131 [ZJOI2007]時態同步——題解

題目傳送門 題目大意: 看題面吧。 思考過程&具體做法: 很明顯我們無法直接求得全局的答案,所以要遞歸處理每棵子樹,用dp[i]代表使i的子樹中的所有葉子節點時態同步需要的最小代價,轉移方程爲dp[i]=∑dp[j](j爲

原创 平面凸包——學習筆記

什麼是平面凸包? 平面凸包(以下簡稱“凸包”)是指覆蓋平面上n個點的最小凸多邊形。形象來說就是把n個點看成n根柱子,用橡皮筋去緊框住這n根柱子,最後形成的拉緊的多邊形就是要求的凸包。 怎麼求平面凸包? 1.Jarvis算法