ACM 2037 今年暑假不AC

来源:互联网 发布:c语言经典实例 编辑:程序博客网 时间:2024/06/05 04:38

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

# include <stdio.h># include <string.h> # include <malloc.h> 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;i<n-1;i++)        for (int j=0;j<n-1-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;i<n;i++)    {           if (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;i<n;i++)        {            scanf("%d",&pro[i].start);            scanf("%d",&pro[i].end);                }        sort(pro,n);//调用;         printf("%d\n",validpro(pro,n));    }    return 0;}
原创粉丝点击