1. 程式人生 > >挑戰程式設計-區間排程問題(掃描線貪心)

挑戰程式設計-區間排程問題(掃描線貪心)

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 */