挑戰程式設計-區間排程問題(掃描線貪心)
阿新 • • 發佈:2018-12-21
n個工作,每個工作開始於si,結束於ti,求最多可以參與多少項工作。該問題有一個貪心解:在可選的工作中,每次都選取結束時間最早的工作。
#include<bits/stdc++.h>
using namespace std;
int s[2333],t[2333],ans,tt;
pair<int,int> P[2333];
int main(){
int n;
cin >> n;
for(int i=1;i<=n;i++)
cin >> s[i];
for(int i=1;i<=n; i++)
cin >> t[i];
for(int i=1;i<=n;i++){
P[i].first=t[i];
P[i].second=s[i];
}
sort(P+1,P+1+n);
for(int i=1;i<=n;i++){
if(P[i].second>tt){
ans++;
tt=P[i].first;
}
}
cout << ans << endl;
return 0;
}
/*
5
1 2 4 6 8
3 5 7 9 10
3
*/