活动安排问题

Posted wangxuelin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了活动安排问题相关的知识,希望对你有一定的参考价值。

问题描述:

  设有n个活动的集合E={1,2,……,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在时间区间[si,fi]内占用资源。若区间[si,fi]与区间[sj,fj]不相交,则称活动i与活动j是相容的。也就是说,当si>=fj或者sj>=fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <algorithm>
 5 #include <stack>
 6 #include <queue>
 7 using namespace std;
 8 
 9 const int maxn=100;
10 int vis[maxn];
11 struct node
12 {
13     int num;
14     int s;
15     int e;
16     /*
17     bool operator<(node b)
18     {
19         if(this->e==b.e)
20             return this->s<b.s;
21         return this->e < b.e;
22     }
23      */
24 }nodes[maxn];
25 bool cmp(node a,node b)
26 {
27     if(a.e<b.e)
28         return true;
29     else if(a.e==b.e && a.s<b.s)
30         return true;
31     return false;
32 }
33 
34 void f(node *nodes,int n)
35 {
36     vis[0]=1;
37     int t=0;
38     for(int i=1;i<n;i++)
39     {
40         if(nodes[i].s>=nodes[t].e)
41         {
42             vis[i]=1;
43             t=i;
44         }
45     }
46 }
47 int main()
48 {
49     int n;
50     cin>>n;
51     queue<int> st;
52     for(int i=0;i<n;i++)
53     {
54         cin>>nodes[i].s>>nodes[i].e;
55         nodes[i].num=i;
56     }
57     sort(nodes,nodes+n,cmp);
58     memset(vis, 0, sizeof(vis));
59     f(nodes,n);
60     for(int i=0;i<n;i++)
61     {
62         if(vis[i]==1)
63             st.push(nodes[i].num);
64     }
65     int len=(int)st.size();
66     cout<<"The answer is:"<<endl;
67     for(int i=0;i<len;i++)
68     {
69         cout<<st.front()<<" ";
70         st.pop();
71     }
72     cout<<endl;
73     return 0;
74 }

Input:

 第一行输入活动的数量n。

第二行输入2*n个整数,依次表示活动的开始时间和结束时间。

Output:

   输出要被安排的活动的编号,编号按照输入顺序从0开始编号。

输入示例:

3

1 3 2 4 3 5

输出示例:

  0 2

 







以上是关于活动安排问题的主要内容,如果未能解决你的问题,请参考以下文章

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

如何从活动中更改片段中视图的可见性

Android 片段和活动

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

如何从主要活动中替换片段

OnDetach/onAttach 片段重新创建片段活动