問題 A: 【貪心】活動安排3
時間限制: 1 Sec 內存限制: 128 MB
[提交] [狀態]
題目描述
設有n個活動的集合E={1,2,…,n},其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間si和一個結束時間fi,且si<fi。如果選擇了活動i,則它在時間區間[si,fi)內佔用資源。若區間[si,fi)與區間[sj,fj)不相交,則稱活動i與活動j是相容的。也就是說,當fi≤sj或fj≤si時,活動i與活動j相容。選擇出由互相兼容的活動組成的最大集合。
輸入
第一行一個整數n(1≤n≤1000);
接下來的n行,每行兩個整數si和fi。
輸出
輸出互相兼容的最大活動個數。
樣例輸入 Copy
4
1 3
4 6
2 5
1 7
樣例輸出 Copy
2
我的代碼:
之前編譯錯誤一次:是因爲PII下面就寫成PLL了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N = 1010;
int n;
PII p[N];
bool cmp(PII a, PII b)
{
return a.second<b.second;
}
int main()
{
ios::sync_with_stdio(false);
while(cin>>n)
{
for(int i=0; i<n; i++)
cin>>p[i].first>>p[i].second;
sort(p, p+n, cmp);
int k=p[0].second;
int ans = 1;
for(int i=1; i<n; i++)
{
if(k<=p[i].first)
{
k = p[i].second;
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}