贪心法 活动选择问题
2013-05-31 20:25
232 查看
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { int i,j,temp; int end[100],begin[100],select[100]={0}; //begin[100]表示事件开始的时刻,end[100]表示结束的时刻,select[100]是标记数组 int timestart=0,sum=0; for(i=0;i<n;i++) scanf("%d %d",&begin[i],&end[i]); for(i=0;i<n-1;i++)//将事件按照结束时刻进行升序排列 for(j=0;j<n-i-1;j++) { if(end[j]>end[j+1]) { temp=end[j]; end[j]=end[j+1]; end[j+1]=temp; temp=begin[j]; begin[j]=begin[j+1]; begin[j+1]=temp; } } i=0; while(i<n) //第一个要选取的事件是最早结束的事件,下一个要选取的是结束之后最早开始的事件 { if(begin[i]>=timestart) { select[i]=1; timestart=end[i]; } i++; } for(i=0;i<n;i++) if(select[i]==1) sum++; printf("%d\n",sum); } return 0; }
相关文章推荐