zcmu--1615: 找區間(貪心)
阿新 • • 發佈:2018-12-09
1615: 找區間
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 291 Solved: 122 [Submit][Status][Web Board]
Description
在X軸上有n個閉區間,去掉儘可能少的區間使剩下的區間都不相交
Input
多組測試資料
第一行輸入n(n<=1000)
接下來n行每行兩個數a,b代表閉區間的兩個端點。
(a,b<=1000000)
Output
輸出最小的刪除的區間數
Sample Input
3
10 20
15 10
20 15
Sample Output
2
【分析】貪心演算法--選擇不相交區間問題
【思路】首先按照區間的結束位置升序排序,一次考慮各個區間。如果沒有和已經選擇的區間衝突就選。
【程式碼】
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=1e3+5; struct node{ int l,r; }a[maxn]; bool cmp(node x,node y) { return x.r<y.r; } int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { int x,y; scanf("%d%d",&x,&y); if(x>y)swap(x,y); a[i].l=x,a[i].r=y; } sort(a,a+n,cmp); // for(int i=0;i<n;i++)cout<<a[i].l<<","<<a[i].r<<endl; int cnt=1,t=a[0].r; for(int i=1;i<n;i++) { if(a[i].l>t) { cnt++; t=a[i].r; } } cout<<n-cnt<<endl; } }