码迷,mamicode.com
首页 > 其他好文 > 详细

活动安排问题

时间:2016-12-20 20:34:02      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:sort   code   ret   names   algorithm   问题   using   活动安排问题   com   

题意: 

  假设现在有N项工作,分别在 Si 时刻开始,在 Ti 时刻结束,对于每项工作可以选择做或者不做,但不可以同时选择时间重叠的工作(即使是开始的瞬间和结束的瞬间重叠也是不允许的)。要求尽可能的多做几件事,那么最多能做几件事呢?

  关键在于选择的策略:

  优先选择时间最少的?F

  优先选择开始最早的?F

  优先选择最早结束!!Y

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 struct Act
 5 {
 6     int start;
 7     int end;
 8 };
 9 bool compare(Act a,Act b)
10 {
11     return a.end<b.end;//优先选择最早结束的
12 }
13 
14 int main()
15 {
16     int n;
17     while(cin>>n)
18     {
19         Act *act=new Act[n+1];
20         act[0].start=-1;
21         act[0].end=-1;
22         for(int k=1;k<=n;k++)
23             cin>>act[k].start>>act[k].end;
24         sort(act,act+(n+1),compare);
25         int num=0;
26         int i=0;
27         for(int j=1;j<=n;j++)
28         {
29             if(act[j].start>act[i].end)
30             {
31                 i=j;
32                 num++;
33             }
34         }
35         cout<<num<<"\n";
36         delete []act;
37     }
38     return 0;
39 }

 

活动安排问题

标签:sort   code   ret   names   algorithm   问题   using   活动安排问题   com   

原文地址:http://www.cnblogs.com/ALL-pp/p/6204068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!