杭电 2037 经典贪心

几年暑假不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;
}

你可能感兴趣的:(namespace,杭电)