您的位置:首页 > 其它

贪心法 活动选择问题

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: