hdu2037的思考
hdu2037不是什么难题但是之前曾做过这道题,一直没想出什么思路就是导师贪心可以做出来,但是一直没有思路,然后今天寒假没事干,便有看到这道题其实发现自己有点思路了,然后便开始做,开始想,其实自己想出来了,但是不知道怎么用计算机语言如何让去表达,当然了,这之间为什么之前没想出来的原因,可能是自己刷的题太少了,自己的思维逻辑能力太差,包括自己对计算机语言不熟练,这都可能原因,考来这几个月刷题没有白费,不断提高自己的路基思维能力,还是很高兴的
但是自己逻辑思维想到了,但是自己的计算机语言不知道如何表达,因此便参考了别人的代码,主要是排序后不知道怎么说清楚,自己边整理了一下思路来做一总结,
1只要p[i] 的结束时间比temp的结束时间还早,那么就要抛弃原来temp,然后把p[i]作为temp,因为只有时间短,才能保证看的节目越多,题目要求看的节目多嘛,只有这样
2p[i]的结束时间小于等于temp开始时间,便可以加1,然后这时把p[i]时间定为temp的时间,来进行
就是依靠这个思路,来进行的,还有num初始化不是0,而是1,因为它本身就是一个
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 struct ma
5 {
6 int tis;
7 int tie;
8 }p[100];
9
10 int cmp(const void *a,const void *b)
11 {
12 struct ma *m=(struct ma *)a;
13 struct ma *n=(struct ma *)b;
14 if(m->tis != n->tis)
15 return m->tis-n->tis;
16 else
17 return m->tie-m->tie;
18
19 }
20 int main()
21 {
22 int n,i,num;
23 struct ma temp;
24 while(scanf("%d",&n)&&n!=0)
25 {
26 for(i=0;i<n;i++)
27 scanf("%d %d",&p[i].tis,&p[i].tie);
28
29 qsort(p,n,sizeof(p[0]),cmp);
30 temp.tis=p[0].tis;
31 temp.tie=p[0].tie;
32 num=1;
33 for(i=1;i<n;i++)
34 {
35 if(p[i].tie<temp.tie)
36 {
37 temp.tis=p[i].tis;
38 temp.tie=p[i].tie;
39 }
40 if(p[i].tis>=temp.tie)
41 {
42 num++;
43 temp.tis=p[i].tis;
44 temp.tie=p[i].tie;
45 }
46 }
47 printf("%d\n",num);
48 }
49 return 0;
3
4 struct ma
5 {
6 int tis;
7 int tie;
8 }p[100];
9
10 int cmp(const void *a,const void *b)
11 {
12 struct ma *m=(struct ma *)a;
13 struct ma *n=(struct ma *)b;
14 if(m->tis != n->tis)
15 return m->tis-n->tis;
16 else
17 return m->tie-m->tie;
18
19 }
20 int main()
21 {
22 int n,i,num;
23 struct ma temp;
24 while(scanf("%d",&n)&&n!=0)
25 {
26 for(i=0;i<n;i++)
27 scanf("%d %d",&p[i].tis,&p[i].tie);
28
29 qsort(p,n,sizeof(p[0]),cmp);
30 temp.tis=p[0].tis;
31 temp.tie=p[0].tie;
32 num=1;
33 for(i=1;i<n;i++)
34 {
35 if(p[i].tie<temp.tie)
36 {
37 temp.tis=p[i].tis;
38 temp.tie=p[i].tie;
39 }
40 if(p[i].tis>=temp.tie)
41 {
42 num++;
43 temp.tis=p[i].tis;
44 temp.tie=p[i].tie;
45 }
46 }
47 printf("%d\n",num);
48 }
49 return 0;
50 }