原创 Poj1456 Supermarket(貪心)

題目鏈接:http://poj.org/problem?id=1456 題意:給定N個商品,每個商品有利潤pi和過期時間di,每天只能賣一個商品,過期商品不能再賣,求如何安排每天賣的商品,可以使收益最大 解法一:優先隊列+貪心 在

原创 最長上升子序列(ologn算法)

如果直接使用dp的話,時間複雜度是O(n^2)的,因爲每次在i點時,都要遍歷i點之前的所有點,來找出最優解。那麼一種優化方法較爲直觀,容易理解,使用樹狀數組或者線段樹維護前綴的最大值,這樣每查詢的時候只需要O(logn)的複雜度即

原创 codeforces D. Cow and Snacks(圖論建模)

傳送門 題意:有1~n種食物,k個客人,每個客人有兩種喜歡的食物,這些客人按照一定順序排隊喫飯,每個人輪到的時候會喫掉自己喜歡的,如果一個都沒有就不滿意,問最好的排隊方法可以讓多少客人不滿意 思路:題解原話“Since every

原创 poj 2279 Mr. Young's Picture Permutations(線性DP)

傳送門 #include<iostream> using namespace std; typedef long long ll; ll k; //k row ll n[10]; // number of each row ll

原创 poj1179 Polygon(區間DP)

傳送門 這是一道環形DP,解決方法是“任意選擇一個位置斷開,複製形成2倍長度的鏈”。 #include<iostream> #include<cstring> #include<vector> using namespace st

原创 P2014 選課(樹形DP)

傳送門 樹形DP入門題。這類題目被稱爲揹包樹形DP,又稱有樹形依賴的揹包問題。雖說是入門題,但第一次寫並不是很順利,網上的解法都是二維的,但我只會先用高維做再轉成低維的,搞的就很難受。 三維解法,思路見註釋 #include<io

原创 Mobile Service(線性DP)

傳送門 真是一道好題,最近寫了不少DP,對狀態的設計也大概有了個掌握,知道什麼情況下可以設計什麼樣的狀態。這道題雖然也看了一下藍書上的題解,但跟自己獨立想的還是差不多的。也是很難得沒有看代碼AC出來。。 我們可以設F[i][x][

原创 poj 3666 Making the Grade(線性DP)

傳送門 做這題需要進階指南上提到的一個引理:在滿足S最小化的前提下,一定存在一種構造序列B的方案,使得B中的數值都在A中出現過。證明略。 我們可以從這個引理入手設計狀態,設dp[i][j]表示將a[i]變爲j需要的最小cost,且

原创 環路運輸(單調隊列+環形處理)

傳送門 此題是環狀結構,處理的方式是把環斷開,複製一倍接在末尾,形成長度爲2n的鏈。 #include<iostream> #include<queue> using namespace std; const int MAXN =

原创 HDU 6230 Panlindrome(Manacher+樹狀數組)

傳送門 題意:給出一個字符串,且定義一種字符串----i—j----爲one and a half palindrome,讓你求字符串中滿足該條件的子串有多少個 思路:這題的難點有兩處,一是根據題目中給出的數學語言定義,轉換成符合

原创 Codeforces B. The Number of Products(遞推)

傳送門 思路:用遞推就好了(我沒有想到)。 #include<iostream> using namespace std; const int MAXN = 2e5+5; long long dp1[MAXN], dp2[MAX

原创 2019ICPC南京網絡賽 A.The beautiful values of the palace(離線樹狀數組)

題目鏈接 題意:給你一個螺旋矩陣,再給定m固定的格子,每個格子都有權值,最後有p次詢問,每次詢問給一個範圍,求出這個範圍內的給定的格子的權值之和。 思路:先想辦法推出公式,根據x, y, n推出這個格子的權值。由於數據量太大,需要

原创 K-th Number(尺取+二分)

傳送門 釐清題意很重要,給你一個序列A,再給出K,M,將A中每個區間的第K大元素放入B序列,問B序列的第M大元素是多少。 思路:可以想到一段序列的所有區間數是固定的,每個區間的第K大也都是固定的。假設B序列的第M大元素是x,則可知

原创 P4555最長雙迴文串(Manacher)

傳送門 題意:給定一個字符串,求出最長的雙迴文串長度。 思路:先跑一邊Manacher,再求出每個字符所在迴文串中,處在右側且最長的子串中心,和處在左側且最長的子串中心,最後拼接起來找最長的即可 #include<iostream

原创 leetcode 1250.檢查「好數組」

傳送門 就是一道結論題,用的是裴蜀定理,具體可以參見百度百科。我們要找出一組互質的數即可,然後O(n)求出這組數的最大公約數,如果爲1說明互質,則爲true class Solution { public: bool is