HDU2037 今年暑假不AC
解题思路:贪心问题,关键突破口是,先将节目的结束时间
从小到大排个序,然后依次判断后面一个节目的开始时间
是否大于或等于前一个符合条件的节目的结束时间。见代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn = 105; 6 int n, cnt, tmp; 7 8 struct node{ 9 int s, e; 10 }p[maxn]; 11 12 int cmp(node A, node B) 13 { 14 return A.e < B.e; 15 } 16 17 int main() 18 { 19 while(~scanf("%d", &n) && n) 20 { 21 for(int i = 0; i < n; i++) 22 { 23 scanf("%d %d", &p[i].s, &p[i].e); 24 } 25 sort(p, p+n, cmp); 26 tmp = p[0].e, cnt = 0; 27 for(int i = 1; i < n; i++) 28 { 29 if(p[i].s >= tmp) //等也是可以的 30 { 31 cnt ++; 32 tmp = p[i].e; //tmp存储节目的结束时间 33 } 34 } 35 printf("%d\n", cnt+1); //cnt此处要加1 36 } 37 return 0; 38 }