ACM 2037 今年暑假不AC

贪心算法
//贪心思想:节目时间越早结束,能看的节目数量就越多

# include 
# include  
# include  
struct program//定义一个结构体 保存节目的开始和结束时间; 
{
    int start=0;
    int end=0;
};

typedef struct program strp;//把struct program == strp 

void sort(strp* pro,int n)//把节目按结束时间排序; 
{   strp t;
    for (int i=0;i1;i++)
        for (int j=0;j1-i;j++)
            if (pro[j].end >pro[j+1].end)
            {
                t = pro[j];
                pro[j] = pro[j+1];//注意!交换的是整个节目数据 
                pro[j+1]= t;
            }
            return;
}

int validpro(strp*pro,int n)//计算可以完整观看的节目数量; 
{   
    if(1 == n)
        return 1;

    int count = 1;
    int end = pro[0].end;
    for(int i=1;iif (pro[i].start >= end)//节目已经按结束时间排序好,只需比较开始时间是否大于等于上一个节目的结束时间; 
        {   
            count++;
            end = pro[i].end;//成立则要把该能完整观看的节目结束时间赋值给end;  
        }
    }
    return count;
}

int main (void)
{
    int n;
    while (~scanf("%d",&n)&&n)
    {   
        int i;
        strp* pro = (strp*)malloc(sizeof(strp)*n);//动态定义一个结构体数组  效果类似于pro[n];
        for (i=0;iscanf("%d",&pro[i].start);
            scanf("%d",&pro[i].end);        
        }
        sort(pro,n);//调用; 

        printf("%d\n",validpro(pro,n));
    }

    return 0;
}

你可能感兴趣的:(ACM)