n:活动的个数,其中每个活动都要求使用同一资源,如演讲会场等。而且在同一时间内只有一个活动能使用这一资源。
i:第i个活动
S[]:存放各个活动开始时间的数组
F[]:存放各个活动结束时间的数组
A[]:A[i]为1代表活动i可以举办
1:S[],F[]数组
//按结束时间最早的贪心
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int S[100],F[100];
bool A[100]={0};
void greedySelector()
{
A[1]=1;
int i=1; //排好序后第1个活动的结束时间最早 一定能举办
for(int j=2;j<=n;j++)
{
if(S[j]>=F[i])
{
A[j]=1;
i=j; //该活动成为当前能举办的最后一个活动
}
else
{
A[j]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>S[i]>>F[i];
sort(F+1,F+n+1); //按结束时间从早到晚排序
greedySelector();
int num=0;
for(int i=1;i<=n;i++)
{
// if(A[i]==1) cout<<i<<" "; //输出可以举办的活动
if(A[i]==1) num++;
}
cout<<num;
return 0;
}
2:结构体(比较大小要自定义比较方法)
//按结束时间最早的贪心
#include <iostream>
#include <algorithm>
using namespace std;
int n;
bool A[100]={0};
struct Activity
{
int s;
int f;
}act[100];
//结构体排序(自定义比较函数) 放进sort函数里
bool cmp(Activity a,Activity b)
{
return b.s>=a.f;
}
void greedySelector()
{
int i=1; //排好序后第1个活动的结束时间最早 一定能举办
A[i]=1;
for(int j=2;j<=n;j++)
{
if(act[j].s>=act[i].f)
{
A[j]=1;
i=j; //该活动成为当前能举办的最后一个活动
}
else
{
A[j]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>act[i].s>>act[i].f;
sort(act+1,act+n+1,cmp);
greedySelector();
int num=0;
for(int i=1;i<=n;i++)
{
// if(A[i]==1) cout<<i<<" "; //输出可以举办的活动
if(A[i]==1) num++;
}
cout<<num;
return 0;
}