描述:
設有n
個活動的集合
e=,其中每個活動都要求使用同乙個資源(如演講會場),而在同一時間內只有乙個活動能使用這一資源。每個活動
i都有乙個要求使用該資源的起始時間
si和乙個結束時間
fi,且
si。如果選擇了活動
i,則他在改時間區間
[si,fi]
內占用資源,若區間
[si,fi]
和區間[sj,fj]
不相交,則稱活動
i與活動
j是相容的。活動安排問題是要求在所給的活動集合範圍內選出最大的相容的活動子集。
貪心演算法與動態規劃的不同之處:
上次寫的揹包問題解決方法是動態規劃,其實有的人一看到0-1
揹包問題時第一反應就是使用貪心法來解決問題
,但是貪心法求的結果並不一定就是最優解
,下面是貪心演算法活動安排的例子
問題分析:
查詢每個活動的結束時間,每一次選擇時查詢具有最早結束時間的相容的活動,先把n
個活動按時間的結束時間非減序排列,這樣,貪心選擇是取當前活動集合中結束時間最早的活動就歸結為取當前活動集合中排在最前面的活動
#include
void sort(int s,int f,int n)//把各個活動的起始時間和結束時間按結束時間遞增排序
}
}
}
int activemanage(int s,int f,bool a,int n)
else a[i]=0;
}
return count;
}
void main()
sort(s,f,n);
p=activemanage(s,f,a,n);
printf("安排的節目個數為
:%d\n",p);
printf("節目的選取情況為
(0表示不選
1表示選取
):\n");
for(i=0;i
printf("%d ",a[i]);
printf("\n");
}
結果:
輸入節目書:
3
請依次輸入節目的開始時間和結束時間
4:00 4:20 4:30 4:40 4:50 5:10
安排的節目個數為:3
節目的選取情況為<0
表示不選,
1表示選取
>
:
1 1 1
活動安排 貪心演算法
活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都要求使用同一資源,如演講會場等,而在同...
活動安排問題 貪心演算法
問題表述 設有n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,...
活動安排問題(貪心演算法)
類似的問題是 選點問題和區間覆蓋問題。活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都...