貪心算法之活動安排問題


問題描述:

給定11個活動的開始時間和結束時間,問怎么安排能使安排的活動數最多?

貪心策略:

優先安排最早結束的活動

【優先安排最早開始的活動問題在於,當該活動的持續時間過長時,不是最優解】

【優先安排持續時間最短的活動問題在於,該活動可能跨過兩個活動的結束和開始時間,不是最優解】

代碼實現:

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 struct act{
 5     int start;
 6     int end;
 7 }acts[100];
 8 bool cmp(const act &a, const act &b)
 9 {
10  
11     return a.end < b.end;
12 }
13 int main(){
14     int n;
15     cin>>n;
16     for(int i=1;i<=n;i++){
17         cin>>acts[i].start>>acts[i].end;
18     }
19     
20     sort(acts,acts+n,cmp);//按結束時間從早到晚排序
21     bool A[100];//表示第i個活動選不選 
22     int j=1;
23     A[1]=true;//第一個活動肯定選 
24     for(int i=2;i<=n;i++){
25         if(acts[i].start>acts[j].end){
26             A[i]=true;
27             j=i;
28         }
29         else A[i]=false;
30     } 
31     cout<<"安排以下活動:"<<endl; 
32     for(int i=1;i<=n;i++){
33         if(A[i]==true)
34         cout<<i<<" ";
35     } 
36     cout<<endl;
37     
38     
39 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM