2016sdau课程练习专题一 1004 problemE

1.题目编号

1004   problemE

2.简单题意

Input

输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

 Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
3.解题思路
关于贪心算法的一个实例,运用课上说的相关知识进行简单改变:
(1).排序  按照结束时间由早到晚进行排序
(2).选择  将最早的一个排在第一位上,然后选择与第一个不冲突的节目排在其后,然后依次规律进行排序
(3).输出  定义一个数每拍了一个节目就自加一,最后输出此数。
4.感觉
贪心算法的一次巩固,对照例题进行补充
5.代码
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;


struct action
{


    int Tis;
    int Tie;
    bool b;     
};


bool cmp(const action &a,const action &b)
{
    return a.Tie<=b.Tie;
}


int main()
{   
    int n;


    while(cin>>n&&n!=0)
    {
        if(n==0)    break;
        vector<action> a(n);
        vector<action>::iterator it1,it2;


        for(int i=0;i<n;i++)
        {
            cin>>a[i].Tis;
            cin>>a[i].Tie;
            a[i].b=0;
        }


        sort(a.begin(),a.end(),cmp);


        it2=a.begin();
        (*it2).b=1;


        int p=1;
        for(it1=a.begin()+1;it1!=a.end();it1++)       
        {
            if((*it2).b=1&&(*it1).Tis>=(*it2).Tie)
            {
                (*it1).b=1;
                it2=it1;
                p++;            
            }   
        }
        cout<<p<<endl;
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值