貪心演算法小結

2022-05-02 21:42:12 字數 2240 閱讀 4399

a題意:多個教室經過走廊搬桌子,不能共用已被占用的走廊(不相交可以同時搬運),每次需要十分鐘,問最少需要的時間。

思路:每次搬運都會覆蓋一段走廊,會覆蓋這段的點,找出所有點中覆蓋次數最多的即是需要搬運的最大次數。

b題意:o(-1)

思路:o(-1)。

c題意:有n頭牛在一條線上,每頭牛都會嚎叫,為了讓所有牛都聽見,嚎叫的聲音等於離它最遠牛的距離,問所有牛嚎叫的聲音分貝是多少。

思路:對所有牛按位置排序,分貝劃過兩頭牛之間距離的次數之和便是答案,遍歷即可。

d題意:有n個人,每個人都有m張紙牌,所有的紙牌都在1~n*m之間並且不重複,每輪每個人拿出一張紙牌比較大小,最大的贏得這輪。給出你的m張紙牌大小,問你最小能贏多少輪。

思路:你從最小開始出,對方先出一張比你大的,其他人從最小開始出,依次繼續。當你再次出牌的時候找不到對手點數有比你大的,那麼你後面都是贏。

e題意:給你n種品牌交流機器,每種型別交流機器又有m種分支產品,現在讓你從n種品牌中各選擇一種,要求b/p最大,b為這選擇的n種中b最小的,p則為選擇的n種的價值和。

思路:列舉所有出現的b,對每種產品的p進行從小到大排序,每次都選擇這種產品中第乙個大於b的。選取所有列舉情況的最優解即可。

f題意:o(-1).

思路:不對區域性而對全程分析,你跟到最後一起到達終點的必是在你後出發而又最快到達終點的。

g/h題意:o(-1)

思路:兩題類似。先對罰時從大到小排序,對於每門功課,從最後期限開始往前找(保證最優解),找到空位即可。

i題意:給出海面上n個島嶼的座標,給出你雷達掃瞄半徑,問你最少要安裝多少個雷達才可監控到所有的海上島嶼。

思路:對每個島嶼分析可知,每個島嶼可被地面上一段[l,r]內的雷達掃射到,只要雷達安裝到這段區域內便可監控到該島嶼。處理出所有的這些區間段,排序後從左到右掃一遍,覆蓋區域選最左邊的右端點值rbd,在rbd左邊的相交區域選乙個雷達即可。

j題意:o(-1)

思路:排序之後從左往右鋪即可,要注意的一點是當木板很長很長的一種情況。

k題意:o(-1).

思路:黑書上的一道例題。因為釣魚只能從左往右走,列舉所有情況:即只走到第i個(i輸出1~n)。然後對於列舉的每種情況,選擇魚最多的池塘去釣魚,這時候你可以想象成你能飛來飛去。

l題意:有一顆n個節點n-1條邊的樹,每個節點有乙個c[i]值,每到達乙個節點time加1,到達這個節點的處罰是time*c[i],並且只有當父親節點走完了才能走孩子節點。

思路: 開始對c值進行排序,每次都找未標記的c值最大的節點,從該節點往前走到根節點都標記一下,後來證明這樣是錯的。

因為每個節點受限制於父親節點,正確的處理方法是利用fact[i]/num[i]進行貪心操作,fact[i]表示該節點集合的c值總和,num表示該集合的節點數。每次選取fact[i]/num[i]最大的,並將它歸併與父親集合,父親num值加1。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

67 typedef long

long

lld;

8const

int maxn=1024;9

intpre[maxn], next[maxn][maxn], ind[maxn], visit[maxn], fact[maxn], num[maxn];

10int

n, rt;

1112

intfind()

1321

return

pos;22}

2324

void union(int x, int

y)25

31 fact[y]+=fact[x];

32 num[y]+=num[x];33}

3435

void

solve()

3646 cout << ans+fact[rt] <

4849

intmain()

5061

for(int i=1; i<=n-1; i++)

6268

solve();69}

70 }

view code

m題意:o(-1)

思路:從大到小,三個一組,所有組裡面最小的之和即使答案。

貪心演算法小結

貪心,即要最好的。通過找每一步的最優解來找整體的最優解。該演算法要求該題能分成幾步進行,且每一步可運用相同的方法並有最優解。能夠將乙個問題劃分成有限個子問題,通過尋找子問題的最優解來找全域性的最優解。特性 1。候選集合a 有乙個以最優方式來解決的問題,為了構造問題的解決方案,有乙個候選物件的集合,將...

貪心演算法小結

最優子結構 對比dfs,不是進行各種可選支路的試探,而是當下就可用某種策略確定選擇,無需考慮未來 未來情況的演變也影響不了當下的選擇 只要一直這麼選下去,就能得出最終的解,每一步都是當下 子問題 的最優解,那麼最終得出的結果就是問題的最優解,這叫做最優子結構。更書面的說法 如果問題的乙個最優解中包含...

貪心演算法小結

貪心演算法,更確切的說是一種解決題目的思想,簡單來說是對於問題的特殊解,它可以通過某種特殊的規則,不斷地選取最優的策略。比如說,最簡單的貪心問題 使用最少的硬幣數量來解決付賬的問題 恰好完成數額,不需要找零 區間的排程問題 給你多個區間,可能會有交叉現象,你需要找所給你的實現當中找出不交叉的區間數量...