活动安排问题
#include<iostream>
#include<algorithm>
using namespacestd;
struct action{
int s;
int f;
int index;
};
bool cmp(constaction &a,const action &b)
{
if(a.f<=b.f)return true;
return false;
}
voidGreedySelector(int n, action a[], bool b[])
{
b[1]=true;
int preEnd=1;
for(int i=2;i<=n;i++)
if(a[i].s>=a[preEnd].f)
{
b[i]=true;
preEnd=i;
}
}
int main()
{
int n;
action a[1000];
bool b[1000];
printf("请输入n: \n");
scanf("%d",&n);
printf("请输入活动: \n");
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].s,&a[i].f);
a[i].index=i;
}
sort(a,a+n+1,cmp);
GreedySelector(n,a,b);
printf("请输出选中的活动编号: \n");
for(int i=1;i<=n;i++){
if(b[i]) printf("%d ",a[i].index);
}
return 0;
}
运行效果: