週末總結:
將大問題分解,尋找區域性最優。貪心問題是通過區域性最優找到全域性最優的問題,而動態規劃問題不可用區域性最優來達到實現全域性最優的目的。
解決問題尋找正確思路的過程,在不知道正確思路快速解答的情況下,先進行模擬,將整個過程**實現,再進行優化,可以嘗試將複雜的條件刪除或取代,先將大一點的條件**實現再逐步細化,優化解題過程。
貪心和動態規劃的區別:貪心是區域性最優,但不一定能推出全域性最優,是自頂而下實現,而動歸是是自底而上,是全域性的最優解,將各個解記錄比較找到最優解。
最優裝載問題,盡可能多的將物品裝船,將輕者先裝,需要公升序排列,依次裝船,記錄剩餘體積小則停止。揹包問題,如果按價值從大到小,則可能因重量太大裝的太少導致價值小,如果按重量由小到大,裝的較多但價值不一定最大,單位重量的價值則將兩個限制條件結合,就是所謂的按價效比排序。
區間問題 ,工作區間排程,還是尋找最少重複兩個區間兩個以上元素的集合,通常需要進行標記收尾區間元素,還有一類區間問題需要記錄整個區間,乙個走廊搬物品,找到重疊最多的重疊次數即為最少需要的次數。泥坑鋪板問題,標記尾部,指標的功能不斷加+長度l,與走廊搬物品不同的是,不可以同時進行所以只需要標記尾部即可。做題時避免一概而論,不能簡單認為區間問題標記即可,打破固化思維,即使是貪心一類問題也需要,一步一步分析由簡及繁實現。
貪心問題通常用到結構體排序,一種是可以bool cmp,需要用sort函式,標頭檔案。另一種是結構體內嵌過載運算子函式。
struct a
}aa[
1001
];
貪心問題的排序也不只有一種,就有很多不走尋常路,所以不能固化思維,保護flowers,先假設只有兩頭牛先後吃花來實現**,再找到規律實現整體。
a[maxn]
;int n;
bool cmp
(node x, node y)
貪心問題用未必只能陣列實現,兩物體碰撞合成乙個物體priority_queue q;可實現直接將結構體資料從大到小排序的效果,需要注意的是優先佇列沒有back()操作。
q.
size()
;//返回q裡元素個數
q.empty()
;//返回q是否為空,空則返回1,否則返回0
q.push
(k);
//在q的末尾插入k
q.pop()
;//刪掉q的第乙個元素
q.top()
;//返回q的第乙個元素
//結構體要有過載,不然報錯
struct node};
// n次計算
for(
int i=
1; icout
)
).val
pop();
//刪除對首,起到清空的作用,因為此時只有隊首元素
最後
對題解的糾正到位,不能簡單認為是什麼問題,必須實踐。遇到問題及時解決,需要課後優先回顧總結。要轉變自己的態度,做題後糾錯總結,ac不是最終目的。做題時,需要打破固有思維,不要嘗試套型別題的思路,一步一步分析最重要,耐心,付出,加油。
ACM貪心演算法總結
通過這一段時間對貪心演算法的練習,即通過對落單的數 主元素等的程式設計,我加深了對貪心演算法的理解,更加明白如何通過貪心找到其區域性最優解。注意 貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解。基本思想 通常以把總體分開的方式進行,以依次調整的方式作出相繼的貪心選擇,每...
ACM 貪心演算法
這是大學期間acm校賽時我出的一道題,考貪心演算法,沒有牽涉複雜的資料結構,有題目加源 贏取最多最有價值的禮物 problem description 五一期間到長沙烈士公園玩,走進去之後,發現許多人在圍在一起玩一種遊戲,遊戲規則是 給你m個環,用乙個環可以套住乙個禮物,同時丟擲時要花費一秒鐘的時間...
ACM 貪心演算法
acm 貪心演算法 在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自...