相容問題 貪心策略

2021-10-05 13:55:32 字數 1811 閱讀 7396

有n項活動申請使用同乙個禮堂,每項活動有乙個開始時間和乙個截止時間。如果任何兩個活動不能同時舉行,問如何選擇這些活動,從而使得被安排的活動數量達到最多。

設s=為活動的集合,si和fi分別為活動i的開始和截止時間,i=1,2,…,n

定義:活動i和j相容<==>si≥fj或sj≥fi,i≠j

求s最大的兩兩相容的活動子集a。

方法:把活動按照截止時間從小到大排序,使得f1≤f2≤…≤fn,然後從前向後挑選,只要與前面選的活動相容,就可以把項活動選入a。

例項:已按照截止時間排序

k=4(1)選擇活動1,截止時間最早:活動2,3與活動1不相容,活動4與活動1相容;

(2)選擇活動4:活動5,6與活動4不相容,活動7與活動4相容;

(3)選擇活動7:活動8,9與活動7不相容,活動10與活動7相容;

(4)選擇活動10:活動11與活動10不相容。

其他貪心策略

(1)按開始時間從小到大排序

反例:已按照開始時間從小到大排序

結果:k=1

(2)按占用時間排序

反例:已按照占用時間從小到大排序

結果:k=2

排序a=

j=1for i=2 to n do

if si≥fj

then j=i

return a

#include

#include

#include

#include

using

namespace std;

class

action

action

(int name,

int begintime,

int endtime)

intgetid()

intgetbegintime()

intgetendtime()

void

print()

};bool

cmp(action a, action b)

else

if(a.

getendtime()

< b.

getendtime()

)else

else}}

intmain()

sort

(actions.

begin()

, actions.

end(

), cmp)

; vector

a(n)

; a[0]

= actions[0]

; j =0;

for(i =

1; i < n; i++)}

cout <<

"最大相容活動數為:"

<< j+

1<< endl;

cout <<

"活動|開始|截止"

複雜度 o(nlogn+n)=o(nlogn)

div css(Firefox hr 相容問題)

firefox hr 相容問題,在ie中正常顯示的hr屬性設定,在firefox裡面不管怎麼弄都是不出來,最後看到一篇文章說ff中必須設定背景顏色才有效果的,這種問題自己閉門造車的話整上個三天三夜都找不到解決辦法啊!把 貼出來分享下 hr imghrcontent 通常我們都會定義 hr 的顯示外觀...

object c c 相容問題

今天在把在另乙個工程的object c 的類移植過來,原來沒問題的類,竟然在類宣告的地方出現編譯異常 remoteplayer.h 55 error expected asm or attribute before remoteplayer 以為是編譯器的設定有問題,折騰了半天才發現,原來是乙個小問...

頁面相容問題

1.重置標籤 2.ie6雙倍邊距 1 要為塊狀元素 2 要左側浮動 3 要有左外邊距 margin left 滿足這三個條件會出現雙倍邊距 解決方案 在相應的塊狀元素的css屬性中加入 display inline 就可以了。3 content ie7 ie8 ie9 firefox可以識別上面附加...