描述
虽然美食节的食品又多又好吃,但是在大家心目中,最好吃的还是亲爱的爸爸妈妈煮的爱心饭菜,可能没有美食节种类那么多,但是与饭菜一起煮进去的还有父母浓浓的爱啊
我们acm队也是一个大家庭,xzc也会煮菜哦,请设想假如某天acm队的成员一起到crq (crq是我们集训队的家长哈)家里吃饭去,crq家有材料若干,xzc会做m种菜,但是每种菜所需的材料种类数量是不一样的,现在把crq家的材料都排成一排从0开始标记好,xzc做菜时就在这排标记好材料里面抽一段用来做菜,现在xzc要好好表现了,请你求xzc总共能做多少种菜?
输入
输入数据有多组,每组数据第一行有一个数m(m<=50), m代表xzc会做m种菜;
接下来有m行,每行两个正整数a,b(0<=a
    
#include<stdio.h>
int main()
{
    int a[100],b[100],i,j,max,m,t1,t2,t3;
    while(scanf("%d",&m),m)
    {
        max=1;
        for(i=0;i<m;i++)
        {
            scanf("%d %d",&a[i],&b[i]);
        }
        for(i=0;i<m;i++)
        for(j=0;j<m-1-i;j++)
        {
            if(b[j]>b[j+1])
            {
                t1=a[j];
                a[j]=a[j+1];
                a[j+1]=t1;
                t2=b[j];
                b[j]=b[j+1];
                b[j+1]=t2;
            }    
        }
        for(i=0;i<m;i++)
        for(j=0;j<m-1-i;j++)
        {
            if(b[j]==b[j+1])
            {
                if(a[j]>a[j+1])
                {
                    t1=a[j];
                a[j]=a[j+1];
                a[j+1]=t1;
                }
            }
        }
        t3=0;
        for(i=0;i<m-1;i++)
        {
            
                if(a[i+1]>=b[t3])
                {
                    max++;
                    t3=i+1;
                }
                else
                {
                t3=t3;    
                }    
        }
        printf("%d\n",max);
    }
    return 0;
}
思路就是同一段的食材是不可以重复使用的。所以我们要尽量的让同样多的食材做出更多的菜。
所以我们就想到用贪心来做。先以结束的食材编号为主要的依据进行升序排序,当结束食材的变号相同是以开始的食材的编号为依据进行升序排序。
然后要尽可能多的选择出来食材去做菜。