原创 洛谷p1769 DP(線段樹思想)

這題乍一看很嚇人,實則當你去手畫一下比賽過程的時候就可以知道了,假設總人數有8人,1, 2 , 3 , 4 , 5 , 6 ,7 ,8. 題目說了每一輪都是按編號順序從小到大去比賽的那麼第一輪就是(1,2),(3,4),(5,6)

原创 洛谷p1831 數位dp

補充點在其他題解裏面沒有的其他東西。 首先是之所以可以數位dp並且不會算錯的原因是,對於每一個數字,如果這個數字是槓桿數,那麼他的支點有且只有一個,如果一個數字有多個支點,那麼數位dp去枚舉支點就會算重複,算多。 另外全部人都是在

原创 CF547E 二分+sa+主席樹

這提供一個sa+主席樹的做法,這個用做法就你順勢可以在敲掉基本一樣的洛谷P4084 題意詢問的是k串在[L,R]的串裏面出現了多少次,不同位置算多次。 對於一個串在SA裏的位置以及和他最像的位置必然是連續的(字典序的原因),然後對

原创 牛客每日一題4.2 月月查華華的手機 二分查找

問題就是詢問某一個串是不是初始串的子序列。 那麼序列都是小寫字母,就對存入每一個字母在初始串的位置。然後對目標串的字母一個個查詢,如果存在一個最接近並且比上一個字母遠的位置,則這個當前字母是存在序列中的,不斷的遍歷完整個目標串就可

原创 洛谷p1220 dp

題目鏈接: 洛谷p1220 這道題是個dp的題目,首先我們就要考慮,老張去關路燈,存不存在一種情況就是我人在3的位置,我去走到5關燈,在走到4去關4的燈。這是不可能存在的是不是,也就是說關燈只會是從已經關好燈的區間去延伸一個單位,

原创 牛客每日一題4.3 Shortest Path 樹dp

首先這個數據範圍,看着就是O(N)或者O(Nlogn)的東西,考慮樹dp。 先貪心的考慮。一個點怎麼找到另一個點?肯定是他能接觸到的最短的那個點,如果與他最短的那個點被用過了呢?找其他第二近的點,以此類推。 對於一個點,是隻有當找

原创 Codeforces Global Round 7 cf 1326D 馬拉車

題意是叫你找最長的迴文串,然後這個迴文串可以由原本的串的前驅+後繼拼起來。 由於前驅和後繼是必須選的對不對(可能有一個爲空)。 那麼我們第一步就是吧原本的串倒置,把正的和反的去找出最長的相同的,這樣就滿足了前驅+後繼的限制。下一步

原创 牛客每日一題3.25 tokitsukaze and Soldier 權值線段樹

考慮我們可以怎麼獲得答案,如果某一個人選了他,那麼答案人數的集合就必定小於等於s[i], 對於答案需要的人的集合的人數爲num,那麼集合裏面所有的s[i]的最小值必然是小於等於num。 明確了上述最關鍵的點後就是可以知道,我們如果

原创 牛客練習賽59 E 石子搬運 dp+三分法

有n堆石子,第i堆石子的石子數量是ai{a_{i}}ai​,作爲牛客網的一頭領頭牛,牛牛決定把這些石子搬回牛客。如果牛牛一次搬運的石子數量是k{k}k,那麼這堆石子將對牛牛產生k2{k^{2}}k2的負擔值。牛牛最多隻能搬運m{m

原创 牛客每日一題3.30 滑動窗口 單調隊列

這道題由於空間限制的很死,所以原本用線段樹之類O(nlogn)的算法都會MLE,唯一的做法就是O(N)的單調隊列。 對於每一個滑動窗口的元素,都是從上一個窗口的基礎上,增加一個新的元素,減掉一個最後的元素。就利用單調雙端隊列去處

原创 牛客每日一題4.1 Rinne Loves Edges 樹dp

首先理解題意後可以轉化爲 以S爲根的樹,用最少的權值去刪除邊,使得所有的葉子與S不相連。 如果可以得出上面的題意那這題就是個樹dp簡單題了。那麼設 f[i] 爲以i爲根的子樹,他的所有葉子都達不到i節點的最少權值花費。 顯然方程就

原创 CF346B kmp+dp

這道題應該是比較典型的利用kmp去dp的題目。 我們思考題意他要求我們的子序列不能夠和virus串完全匹配,那麼我們就可以在原先求最長公共子序列的基礎上在加一個維度。就是 f[i][j][z],第一個串枚舉到i,第二個串枚舉到j,

原创 牛客每日一題3.26 合併迴文子串 動態規劃

首先這種題肯定是動態規劃!!!!!不要往其他地方想。要怎麼做呢先從單個串要怎麼判斷區間最長迴文來說。單個串如果要判斷任意一個區間[L,R]是不是迴文可以去寫區間dp,對於一個串長度大於2的迴文串,如果要在此基礎上在延長串的長度必然

原创 CF960F CDQ分治

首先,這不是正解,甚至歪的很過分,你還要吸氧,但是我就是要發。 根據題意我們可以知道首先要求 轉移的路徑編號的轉移必須是從小到大 轉移的權值必須從小到大 一條邊的終點轉移到另一條邊的起點,起點終點需要相同 我的思路是什麼呢,這

原创 CF229D 動態規劃dp

因爲我菜所以只能想到消耗空間大,時間複雜度差的做法但是我就是要發!! 首先這種題需要知道他是個dp(看不出來就GG),然後思考下怎麼做,首先他是會進行區間合併,並且可以進行連續的合併,也就是把這個過程看做是一個連續區間合併的過程