日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(贪心)区间问题大致思路

發(fā)布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (贪心)区间问题大致思路 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.選擇不相交區(qū)間。

a.描述:

數(shù)軸上有n個開區(qū)間(ai, bi)。選擇盡量多個區(qū)間,使得這些區(qū)間兩兩 沒有公共點。

b.思路總結(jié):

1.區(qū)間x完全包含y,選y
2.按照bi從小到大排序,從第一個區(qū)間開始選
3.把所有和上一個區(qū)間相交的區(qū)間排除在外

c.思路分析:

首先明確一個問題:假設(shè)有兩個區(qū)間x,y,區(qū)間x完全包含y。那么,選x是不劃算的,因 為x和y最多只能選一個,選x還不如選y,這樣不僅區(qū)間數(shù)目不會減少,而且給其他區(qū)間留出 了更多的位置。接下來,按照bi從小到大的順序給區(qū)間排序
貪心策略是:一定要選第一個 區(qū)間。

現(xiàn)在區(qū)間已經(jīng)排序成b1≤b2≤b3…了,考慮a1和a2的大小關(guān)系。

情況1:a1>a2,如圖所示,

區(qū)間2包含區(qū)間1。前面已經(jīng)討論過,這種情況下一 定不會選擇區(qū)間2。不僅區(qū)間2如此,以后所有區(qū)間中只要有一個i滿足a1>ai,i都不要選。在 今后的討論中,將不考慮這些區(qū)間。
情況2:排除了情況1,一定有a1≤a2≤a3≤…,如圖所示。

如果區(qū)間2和區(qū)間1完全 不相交,那么沒有影響(因此一定要選區(qū)間1),否則區(qū)間1和區(qū)間2最多只能選一個。如果 不選區(qū)間2,區(qū)間1的1部分其實是沒有任何影響的(它不會擋住任何一個區(qū)間),區(qū)間1的有效部 分其實變成了2部分,它被區(qū)間2所包含!由剛才的結(jié)論,區(qū)間2是不能選的。依此類推, 不能因為選任何區(qū)間而放棄區(qū)間1,因此選擇區(qū)間1是明智的。
選擇了區(qū)間1以后,需要把所有和區(qū)間1相交的區(qū)間排除在外,需要記錄上一個被選擇的 區(qū)間編號。這樣,在排序后只需要掃描一次即可完成貪心過程,得到正確結(jié)果。

2.區(qū)間選點問題。

a.描述:

數(shù)軸上有n個閉區(qū)間[ai, bi]。取盡量少的點,使得每個區(qū)間內(nèi)都至少有 一個點(不同區(qū)間內(nèi)含的點可以是同一個)。

b.思路總結(jié):

1.按b從小到大排序(b相同時a從大到小排序)
2.區(qū)間包含的情況 下,大區(qū)間不需要考慮。
3.取最后一個點

c.思路分析:

如果區(qū)間i內(nèi)已經(jīng)有一個點被取到,則稱此區(qū)間已經(jīng)被滿足。受上一題的啟發(fā),下面先 討論區(qū)間包含的情況。由于小區(qū)間被滿足時大區(qū)間一定也被滿足,所以在區(qū)間包含的情況 下,大區(qū)間不需要考慮。
把所有區(qū)間按b從小到大排序(b相同時a從大到小排序),則如果出現(xiàn)區(qū)間包含的情 況,小區(qū)間一定排在前面。第一個區(qū)間應(yīng)該取哪一個點呢?此處的貪心策略是:取最后一個 點

根據(jù)剛才的討論,所有需要考慮的區(qū)間的a也是遞增的,可以把它畫成圖8-8的形式。如 果第一個區(qū)間不取最后一個,而是取中間的,如a點,那么把它移動到最后一個點b后,被 滿足的區(qū)間增加了,而且原先被滿足的區(qū)間現(xiàn)在一定被滿足。不難看出,這樣的貪心策略是 正確的。

3.區(qū)間覆蓋問題。

a.描述:

數(shù)軸上有n個閉區(qū)間[ai, bi],選擇盡量少的區(qū)間覆蓋一條指定線段[s,t]。

b.思路總結(jié):

1.每個區(qū)間在[s, t] 外的部分都應(yīng)該預(yù)先被切掉
2.按照a從小到大排序,選擇起點在s的最長區(qū)間[ai,bi]
3.新的起點應(yīng) 該設(shè)置為bi,忽略所有區(qū)間在bi之前的部分

c.思路分析:

本題的突破口仍然是區(qū)間包含和排序掃描,不過先要進(jìn)行一次預(yù)處理每個區(qū)間在[s, t] 外的部分都應(yīng)該預(yù)先被切掉,因為它們的存在是毫無意義的。預(yù)處理后,在相互包含的情況 下,小區(qū)間顯然不應(yīng)該考慮
把各區(qū)間按照a從小到大排序。如果區(qū)間1的起點不是s,無解(因為其他區(qū)間的起點更 大,不可能覆蓋到s點),否則選擇起點在s的最長區(qū)間。選擇此區(qū)間[ai, bi] 后,新的起點應(yīng) 該設(shè)置為bi,并且忽略所有區(qū)間在bi之前的部分,就像預(yù)處理一樣。雖然貪心策略比上題復(fù) 雜,但是仍然只需要一次掃描

s為當(dāng)前有效起點(此前部分已被覆蓋),則 應(yīng)該選擇區(qū)間2。

總結(jié)

以上是生活随笔為你收集整理的(贪心)区间问题大致思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。