杭电 2037 经典贪心

来源:互联网 发布:三维立体动画制作软件 编辑:程序博客网 时间:2024/05/20 07:59

几年暑假不ac。
这道题是经典贪心。
方法是按照每个节目结束的时间进行排序。若这个节目的开始时间大于等于上一个节目结束的时间则可以看。
排序法一:(冒泡)

#include<iostream>using namespace std;#include<stdio.h>#include<algorithm>int main(){    int n;    int a[100],b[100];    while(scanf("%d",&n) != EOF && n)    {        int i;        for(i = 0;i < n; i++)            scanf("%d%d",&a[i],&b[i]);        int max1,j;        for(i = 0;i < n; i++)            for(j = i;j < n; j++)                if(b[i] > b[j])                {                    max1 = a[j];                    a[j] = a[i];                    a[i] = max1;                    max1 = b[j];                    b[j] = b[i];                    b[i] = max1;                }        int num = 0;        int bagin = 0;        for(i = 0;i < n; i++)            if(a[i] >= bagin)                {                    num++;                    bagin = b[i];                }        printf("%d\n",num);    }    return 0;}

排序法二 :(sort)

#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;class Time{public:    int bagin;    int end;};bool cmp(Time a,Time b){    return a.end<b.end;}int main(){    Time a[100];    int n;    while(scanf("%d",&n) != EOF && n)    {        int i;        for(i = 0;i < n; i++)            scanf("%d%d",&a[i].bagin,&a[i].end);        sort(a,a+n,cmp);        int num = 0;        int t = 0;        for(i = 0;i < n; i++)            if(a[i].bagin >= t)            {                num ++;                t = a[i].end;            }        printf("%d\n",num);    }    return 0;}
0 0