#include<iostream>
using namespace std;
int n; //总活动数
int s[100]; //活动开始时间
int f[100]; //活动结束时间
bool a[100]; //记录活动是否被安排
void selection_sort(int *s,int *f, int n) { //选择排序
int i, j, min;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (f[min] > f[j])
min = j;
swap(f[i], f[min]);
swap(s[i], s[min]);
}
}
int greedySelector(int *s,int *f,bool *a){//开始,结束,是否选择活动
a[0] = true;//选择最早结束的第一个活动
int j = 0; //记录最近一次加入活动的编号
int count = 1;
for(int i = 1;i<n;i++){
if(s[i]>=f[j]){ //下一次活动的开始时间大于上次结束时间
a[i] = true;
count++;
j = i; //记录索引
}else{
a[i] = false;
}
}
return count;
}
int main(){
cin>>n;
for(int i = 0;i<n;i++){
cin>>s[i]>>f[i];
}
selection_sort(s,f,n); //先对结束时间进行排序
greedySelector(s,f,a);
for(int i = 0;i<n;i++){
cout<<s[i]<<f[i]<<a[i]<<endl;
}
}
【算法】贪心算法——活动安排问题
最新推荐文章于 2024-09-28 22:05:59 发布