這兩天把幾個貪心模型打了一遍,這裡就把模型及其證明總結一下。
貪心性質:
1.區域性最優解----->全域性最優解
2.無後效性(貪心的選擇只取決於之前的狀態,後面的選擇不會影響當前的選擇)。
模型1:選擇不想交區間問題
題目:給定n個開區間(ai , bi),選擇盡量多個區間,使得這些區間兩兩沒有公共點。
思路:用b(i)排序,且b(i)<=b(i+1),若當前區間的左端點(大於等於)上一選擇區間的右端點,則可以選擇該區間。
證明:以後再補吧...
模型2:區間選點問題
題目:給定n個閉區間【ai,bi】,在數軸上選盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)。
思路:很明顯,我們希望的就是乙個點能在盡可能多的區間中。先將區間用b(i)排序,且b(i)<=b(i+1)。對於第乙個區間,其它所有區間的右端點都在它的區間的右端點的右邊,所以我們選這個區間的右端點。所以這個結論可以推廣到所有的區間,但是如果當前區間已經被覆蓋了,就沒有必要再取選點了。
證明:一般用反證法,假設我們不選取每個區間的右端點,而選擇靠左的某個點,其座標為i,如果有區間左端點為i+1,那就說明選的這個點不是最優的。所以選擇右端點是最優的。
模型3:區間覆蓋問題
題目:給n個閉區間[ai,bi],選擇盡量少的區間覆蓋一條指定的線段區間[s,t]。
思路:按照ai
證明:這個比較顯然吧!
模型4:流水作業排程問題
題目:...懶得填坑
思路:...懶得填坑
證明:...懶得填坑
模型5:帶期限和罰款的單位時間任務排程
題目:有n個任務,每個任務都需要1個時間單位執行,任務i的截止時間di(1<=di<=n)表示要求任務i在時間di結束時必須完成,誤時懲罰wi表示若任務i未在時間di結束之前完成,將導致wi的罰款。
確定所有任務的執行順序,使得懲罰最少。
思路:我們肯定希望wi大的先被完成,所以我們按照wi從小到大排序,開乙個陣列記錄每一單位時間是否被占用,遇到每乙個任務,盡量把當前任務放在靠近截止時間的位置,如果放不下就捨棄,可以用while實現就行了。其實還有乙個小小的優化,即f[i]表示i之前的時間是否被占用,如果全部被占用,就沒有必要while了,直接continue即可,這叫空間換時間??
證明:可以用反證法。假設當前放法不是最優的,那麼必然有乙個任務j滿足w[j]<=w[i],i為已經安排的任務,任務j若是替代i,則明顯不是最優的。
綜上所述:模型是死的,面對貪心題,應回想起各類模型,找與題目的聯絡,從模型入手,找到適合題意的貪心策略。
NOIP考點總結
一發noip考點的總結。noip考綱總結 noip考前經驗談 首先來一張圖,很直觀 截止到2012年資料 下面是收集的一些,我改了一下 紅色加粗表示特別重要,必須掌握 綠色加粗表示最好掌握,可能性不是很大,但是某些可以提高程式效率 高精度 a.加法 b.減法 c.乘法 應該只會有高精乘單精 d.高精...
noip必會考點
普及組必學 1 模擬演算法 暴力列舉 按照題目的要求,題目怎麼說就怎麼做,保證時間和正確性即可。2 搜尋與回溯,主要的是dfs 深度優先搜尋 和bfs 寬度優先搜尋 基本沒有直接的暴力搜尋。一般是記憶化搜尋加剪枝,普及組第三題難度。3 簡單操作 如篩法 字首和 快速冪 高精度 輾轉相除法等,掌握全面...
總結盒模型的考點
盒模型,前端面試中必考的點!盒子模型有兩種 w3c標準盒模型 ie盒模型 w3c定義的盒子模型包括margin border padding content 元素的width content的寬度 ie盒子模型與w3c的盒子模型唯一區別就是元素的寬度,元素的width content padding...