(最小区间覆盖)给出 个区间,第 个区间的左右端点是 。现在要在这些区间中选出若干个,使得区间 被所选区间的并覆盖(即每一个 都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。
输入第一行包含两个整数 和 ()
接下来 行,每行两个整数 ()。
提示:使用贪心法解决这个问题。先用 的时间复杂度排序,然后贪心选择这些区间。
试补全程序。
#include <iostream> using namespace std; const int MAXN = 5000; int n, m; struct segment { int a, b; } A[MAXN]; void sort() // 排序 { for (int i = 0; i < n; i++) for (int j = 1; j < n; j++) if (①) { segment t = A[j]; ② } } int main() { cin >> n >> m; for (int i = 0; i < n; i++) cin >> A[i].a >> A[i]・b; sort(); int p = 1; for (int i = 1; i < n; i++) if (③) A[p++] = A[i]; n = p; int ans =0, r = 0; int q = 0; while (r < m) { while (④) q++; ⑤; ans++; } cout << ans << endl; return 0; }①处应填( )
②处应填( )
③处应填( )
④处应填( )
⑤处应填( )