活動選擇
Problem Description
比如有5個活動,開始與截止時刻分別爲:
最佳安排序列爲:1,4,5。
Input
以後輸入n行,分別輸入序號爲1到n的活動使用中心的開始時刻a與截止時刻b(a,b爲整數且0<=a,b<24,a,b輸入以空格分隔)。
Output
Sample Input
6 8 10 9 16 11 16 14 15 10 14 7 11
Sample Output
1,5,4
Hint
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct activity{
int tag;
int begin;
int end;
}activity;
struct activity act[100];
int res[100];
bool cmp(struct activity x,struct activity y){
return x.end<y.end;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&act[i].begin,&act[i].end);
act[i].tag=i+1;
}
sort(act,act+n,cmp);
bool a[100];
a[0]=true;
int j=0;
for(int i=1;i<n;i++){
if(act[i].begin>=act[j].end){ //貪心算法
a[i]=true;
j=i;
}
else{
a[i]=false;
}
}
int p=0;
for(int i=0;i<n;i++){
if(a[i]){
res[p++]=act[i].tag;
}
}
for(int i=0;i<p;i++){ //排版需要
if(i==p-1){
printf("%d\n",res[i]);
}
else{
printf("%d,",res[i]);
}
}
return 0;
}