hpuoj【1216】复习! 复习!【贪心】

来源:互联网 发布:v380监控软件安卓版 编辑:程序博客网 时间:2024/06/06 18:18

1216: 复习!复习! [贪心]

时间限制: 1 Sec 内存限制: 128 MB

提交: 108 解决: 32 统计

题目描述

马上到要放假了,也意味着马上要考试了。

王炸突然发现他只顾着学acm忘了学习功课,为了避免考试挂科,他决定进行一次复习以让更多的功课及格。

已知他现在有n门功课,每门功课都有一个开始复习和复习完毕的时间[st,endd)来表示。

求他最多可以复习多少门功课。

输入

数据的第一行输入一个整数T,表示数据的组数。(0 < T < 300)

以后的T组数据,第一行输入一个整数n(1 ≤ n ≤ 1000)

接下来的n行,每行两个整数st,endd(1 ~ 1e6 且 endd > st)

输出

输出一个整数,表示王炸最多能复习几门功课。

样例输入

231 22 43 421 100100 200

样例输出

22
解析:
    贪心算法,按照结束时间从小到大排序,判断下一个的开始时间是否大于等于前一个结束时间,如果是,计数加一;
否则就跳过这个数据继续判断。
程序如下:
#include<cstdio>#include<algorithm>using namespace std;struct stu{int st;int edd;}p[10003];bool cmp(stu a,stu b){return a.edd<b.edd;}int main(){int t;scanf("%d",&t);while(t--){int n,i,j;int ans=1;scanf("%d",&n);for(i=0; i<n; i++)    scanf("%d %d",&p[i].st,&p[i].edd);sort(p,p+n,cmp);for(i=0; i<n; i++)        {            if(p[i].st)            for(j=i+1; j<n; j++)            {            if(p[j].st>=p[i].edd)            {                ans++;                break;            }        else            p[j].st=0;            }        }printf("%d\n",ans);}    return 0;}


原创粉丝点击