天梯 1214 线段覆盖

解题报告:这题很类似于杭电的一个题,http://acm.hdu.edu.cn/showproblem.php?pid=2037,今年暑假不AC,安排节目的,几乎是相同的题,做法是将所有的线段按照尾端点非递减排序,意思就是说尽量先选择靠前的线段,这是一种贪心的思想的体现,然后,逐一判断,只要当前的线段前端点在上一条线段的尾端点之后,那么这条线段就不去掉,否则这条线段不要。最后统计剩下多少条线段。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 using namespace std;
 6 struct node {
 7     int front,end;
 8 }len[105];
 9 int visit[2000];
10 bool cmp(node a,node b) {
11     return a.end < b.end;
12 }
13 
14 int main() {
15     int n;
16     while(scanf("%d",&n)!=EOF) {
17         for(int i = 0;i<n;++i) {
18             scanf("%d%d",&len[i].front,&len[i].end);
19             if(len[i].front > len[i].end)
20             swap(len[i].front,len[i].end);
21         }
22         sort(len,len+n,cmp);
23         int ans = 0,m = -2000;
24         for(int i = 0;i<n;++i)
25         if(len[i].front >= m) {
26             ans++;
27             m = len[i].end;
28         }
29         printf("%d\n",ans);
30     }
31     return 0;
32 }
View Code

 

posted @ 2013-08-09 22:14  xiaxiaosheng  阅读(240)  评论(0编辑  收藏  举报