有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可以識別上面附加...