原创 POJ 2533 Longest Ordered Subsequence

題意:長度爲N的序列a,求出最長上升子序列。 思路:兩種基本思路,都是利用的動態規劃的思想 第一種方法: 設dp[i]爲以數字a i   結束的最長上升子序列的長度。 則有如下的轉移方程: dp[i]

原创 枚舉子集

對於一個用位來表示的集合,我們可以枚舉其子集。設集合爲sup,枚舉的子集爲sub 按照遞增的順序枚舉的話,如果只是簡單的(sub+1)&sup的話,會出現前後沒有發生變化的問題。應該用下面的形式: for(int sub = 0; sub

原创 POJ 2063 Investment 變形的完全揹包

題意:John有X元錢。現在有D種理財產品,給出每種理財產品的價格(1000的整數倍),每年得到的回報。現在John想投資N年,問得到的最大回報是多少。 思路:一件物品可以買無限次,這是個標準的完全揹包。因爲每年得到的回報可以作爲下一年的

原创 HDU 3466 Proud Merchants 01揹包 單機調度問題

題意:在一個國家裏,有N件商品。每件商品有價格Pi,價值Vi,和一個神奇的屬性Qi。Qi表示,當你的錢大於等於Qi的時候,才能買商品i。現在你有M元錢,希望你最大化買到的東西的價值和。 思路:當沒有屬性Qi的時候,就是個標準的01揹包。

原创 POJ 1849 Two 樹的直徑

題意:一個城鎮的道路是樹形的,每條道路有對應的長度。因爲下雪,每條道路都被雪覆蓋了。現在有兩個人從給定的點S出發,分別駕駛掃雪車去掃雪。問題是:在將所有的道路上積雪全部清理的情況下 ,最小化兩人走過的路程。兩個人沒有必要回到起始點

原创 HDU 3507 Print Article 斜率優化DP

題意:Zero有一臺老式打印機。他想打印一篇有N個單詞的文章,每個單詞有花費C i   。在這臺打印機上一行打印k個單詞的花費爲(∑ k i=1 C i ) 2 +M  ,其中M爲定值。求出Zero打印這篇文章的最小花費。 思路:可以注

原创 POJ 1155 TELE 樹形揹包

題意:在一個有向樹形網絡中,內部節點是信息發射臺,葉子節點是收聽觀衆。根節點向兒子節點發送信息需要不同的費用。觀衆收聽對應的信息會支付不同的報酬。現在公司想,在收益非負的情況下,讓最多的聽衆收聽到比賽信息,問最多可以收聽多少聽衆。 思路

原创 斜率優化DP

當DP的時間複雜度大於時限的時候,我們就要對DP進行優化。其中一個比較常用的就是用單調隊列優化DP。 單調隊列優化DP的思想是:減小最優解的搜索空間,提高狀態轉移的效率。和搜索中的剪枝一樣。 單調隊列通過下面的操作來縮小最優解的空間:

原创 HDU 2467 Déjà vu IDA*

題意:一個機器內有M個開關,每個開關表示0 ~ 2n−1 之間的數字,並且每個每個數字的二進制表達中,有且只有三個1。一個數字Y通過M個開關得到的結果爲: Y⊕X1⊕X2⊕...⊕XM 現在給出初始的數字S,和目標的數字T,想用最小的

原创 BOJ 171 6th I 單調隊列優化DP

題意:給出N個矩形的左下角的點(x1,y1) 、右上角的點(x2,y2) 。定義矩形A≤B ,當A.x2<B.x1 且A.y2<B.y1 。 求出最長的矩形序列A1,A2,...,An ,滿足A1≤A2≤A3...≤An . 思路:

原创 HDU 3045 Picnic Cows 斜率優化DP

題意:John要組織N頭牛去春遊。每頭牛有自己的高興值。John需要把這些牛分成若干組,每組內至少有T頭牛。每個牛的高興值,都會降低爲組內高興值最小的牛的高興值。John想最小化減少的值。 思路:首先考慮到,對於每一組,我們要知道組內最

原创 HDU 3480 Division 斜率優化DP

題意:現在有N個元素的集合S。把集合S劃分成M個子集,每個子集的花費爲集合中最大和最小元素的差的平方。 求如何劃分,才能總的代價最小。 思路:首先要注意到,因爲集合中的元素具有無序性,我們只需知道集合中最大和最小的元素就能算出代價,也

原创 UVAL 3486 Cells DFS時間戳

題意:給出一顆樹。有N個詢問,每個詢問有兩個節點,判斷前面的節點是否是後面節點的祖先。 思路:首先要注意到題目中最後樹總節點的個數上限爲20000000,而對時限是3s,所以算法的複雜度基本上確定爲線性。 起初想的是用離線的Tarja

原创 用棧將遞歸轉化爲非遞歸

在競賽中如果系統棧很小的話,過深的遞歸會讓棧溢出,這個時候我們就要自己手寫棧,將遞歸轉化成手工棧。 方法其實也很簡單。 基本思路上,我們就是用棧不斷的pop,push。但是何時push,何時pop呢? 在《算法導論》上對深度優先遍歷

原创 HDU 3507 Print Article 斜率優化DP

題意:Zero有一臺老式打印機。他想打印一篇有N個單詞的文章,每個單詞有花費C i   。在這臺打印機上一行打印k個單詞的花費爲(∑ k i=1 C i ) 2 +M  ,其中M爲定值。求出Zero打印這篇文章的最小花費。 思路:可以注