您的位置:首页 > 其它

ACM 2037 今年暑假不AC

2017-09-02 09:45 218 查看
贪心算法

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

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