作為新一代的好青年肯定會喜歡許多的電視節目,比如說新聞聯播,焦點訪談,又如招聘類的節目有非你莫屬,職來職往,娛樂節目如快樂大本營。現在給你每個節目的開始時間和結束時間,要求你求出看儘可能多的完整節目。
每個電視節目i都有一個起始時間si和一個結束時間fi,且si <fi 。如果選擇了節目i,則在半開時間區間[si, fi)就要看這個節目。若區間[si, fi)與區間[sj, fj)不相交,則稱節目i與節目j是相容的。也就是說,當si≥fj或sj≥fi時,節目i與節目j相容。
對於活動安排問題可以用貪心演算法解決,我們把節目的結束時間按非減序排列,所以演算法greedySelector每次總是選擇具有最早完成時間的相容節目加入集合A中。直觀上,按這種方法選擇相容節目為未安排節目留下儘可能多的時間。也就是說,該演算法的貪心選擇的意義是使剩餘的可安排時間段極大化,以便安排儘可能多的相容節目。
演算法greedySelector的效率極高。當輸入的活動已按結束時間的非減序排列,演算法只需O(n)的時間安排n個活動,使最多的活動能相容地使用公用資源。如果所給出的活動未按非減序排列,可以用O(nlogn)的時間重排
代碼:
#include<iostream>using namespace std;#include<algorithm>int n,i;struct jiemu{int s;int e;}edge[105];int cmp(jiemu a,jiemu b){return a.e<b.e;}void Greedy_algorithm(){int count=1;sort(edge,edge+n,cmp);int j=0;for(i=1;i<n;i++){if(edge[j].e<=edge[i].s)//相容{j=i;count++;}}cout<<count<<endl;}int main(){while(cin>>n,n){for(i=0;i<n;i++){cin>>edge[i].s>>edge[i].e;}Greedy_algorithm();}return 0;}