贪心:区间调度问题
有 n 项工作,每项工作分别在 si 时间开始,在 ti 时间结束。对于每项工作,你都可以选择参与与否。参与工作的时间段不能重复 (开始的瞬间和结束的瞬间重叠也是不允许的)
分析:在可选的工作中,每次都选取结束时间最早的工作
// CreateTime: 2015-04-07 21:45:48 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <cmath> #include <algorithm> #include <queue> using namespace std; const int maxn = 100005; pair<int, int> v[maxn]; int s[maxn]; int t[maxn]; int cmp(pair<int, int> a, pair<int, int> b) { return a.first < b.first; } void solve() { } int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &s[i]); } for (int i = 0; i < n; i++) { scanf("%d", &t[i]); } for (int i = 0; i < n; i++) { v[i] = make_pair(s[i], t[i]); } sort(v, v+n, cmp); int t = -1; int ans = 0; for (int i = 0; i < n; i++) { if (v[i].first > t) { t = v[i].second; ans++; } } printf("%d\n", ans); return 0; }