1133 不重疊的線段 (貪心算法,最大區間不重合問題)


X軸上有N條線段,每條線段有1個起點S和終點E。最多能夠選出多少條互不重疊的線段。(注:起點或終點重疊,不算重疊)。
 
例如:[1 5][2 3][3 6],可以選[2 3][3 6],這2條線段互不重疊。
Input
第1行:1個數N,線段的數量(2 <= N <= 10000)
第2 - N + 1行:每行2個數,線段的起點和終點(-10^9 <= S,E <= 10^9)
Output
輸出最多可以選擇的線段數量。
Input示例
3
1 5
2 3
3 6
Output示例
2


代碼如下:
#include<cstdio>
#include<algorithm>
#define MAXN 100010
using namespace std;
struct node
{
 int l, r;
};
bool cmp(node a, node b)
{
 return a.r < b.r;
}
node num[MAXN];
int main()
{
 int n;
 while (scanf("%d", &n) != EOF)
 {
  for (int i = 0; i < n; i++)
   scanf("%d%d", &num[i].l, &num[i].r);
  sort(num, num + n, cmp);
  int ans = 0;
  if (n>0)
  {
   ans = 1;
   int temp = num[0].r;
   for (int i = 0; i < n;i++)
   if (num[i].l >= temp)
   {
    temp = num[i].r;
    ans++;
   }
  }
  printf("%d\n", ans);
 }
 return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM