贪心法 活动选择问题

来源:互联网 发布:php gb2312转utf8 编辑:程序博客网 时间:2024/05/22 08:51

#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;}


 

原创粉丝点击