活動安排問題

來源:互聯網
上載者:User

作為新一代的好青年肯定會喜歡許多的電視節目,比如說新聞聯播,焦點訪談,又如招聘類的節目有非你莫屬,職來職往,娛樂節目如快樂大本營。現在給你每個節目的開始時間和結束時間,要求你求出看儘可能多的完整節目。

       每個電視節目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;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.