知识点:区间贪心
这个题是区间贪心一个模型的,可以说是模板题,就是给定若干个区间,若干个点,一个点只能属于一个区间,问最多能有多少个区间放进去点
如果不会证明,那么李煜东写的很明白,虽然初学的时候写这类贪心题都是靠感觉写的,俗称蒙的,但是还是看一下证明比较好,给自己增加知识储备
- #include
-
- using namespace std;
-
- const int N = 2505;
-
- bool cmp1(pair<int, int> a, pair<int, int> b) {
- return a.first > b.first;
- }
-
- bool cmp2(pair<int, int> a, pair<int, int> b) {
- return a.first > b.first;
- }
-
- int main() {
- int n, m;
- cin >> n >> m;
- pair<int, int> a[N], b[N];
- for (int i = 0; i < n; i++) cin >> a[i].first >> a[i].second;
- for (int i = 0; i < m; i++) cin >> b[i].first >> b[i].second;
- sort(a, a + n, cmp1);
- sort(b, b + m, cmp2);
- int ans = 0;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (!b[j].second) continue;
- if (b[j].first <= a[i].second && b[j].first >= a[i].first) {
- b[j].second--;
- ans++;
- break;
- }
- }
- }
- cout << ans;
- return 0;
- }