贪心算法区间覆盖代码
时间: 2023-10-28 16:00:05 浏览: 100
下面是使用贪心算法解决区间覆盖问题的代码:
```
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int s, t, n;
struct num {
int begin;
int end;
bool operator< (const num &w) const {
return begin < w.begin;
}
} p[N];
int main() {
cin >> s >> t;
cin >> n;
for(int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
p[i = {a, b};
}
sort(p, p + n);
int res = 0;
bool k = false;
for(int i = 0; i < n; i++) {
int j = i, r = -2e9;
while(j < n && p[j].begin <= s) {
r = max(p[j].end, r);
j++;
}
if(r < s) {
res = -1;
break;
}
res++;
if(r >= t) {
k = true;
break;
}
s = r;
i = j - 1;
}
if(!k) {
res = -1;
}
cout << res << endl;
return 0;
}
```
该代码实现了贪心算法来解决区间覆盖问题。首先,根据输入的s和t,以及n个区间的起始和结束点,将区间按照起始点从小到大进行排序。然后,对每个区间进行遍历,找到能够覆盖起始点s的区间,并更新s为该区间的结束点。如果没有找到能够覆盖起始点s的区间,则将结果res设为-1。最后,输出结果res。
阅读全文