组合题5 个小题
已作答 0 / 5
(最小区间覆盖)给出 n 个区间,第 i 个区间的左右端点是 [ai,bi]。现在要在这些区间中选出若干个,使得区间 [0,m] 被所选区间的并覆盖(即每一个 0≤i≤m 都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。
输入第一行包含两个整数 n 和 m (1≤n≤5000,1≤m≤109)
接下来 n 行,每行两个整数 ai,bi (0≤ai,bi≤m)。
提示:使用贪心法解决这个问题。先用 O(n2) 的时间复杂度排序,然后贪心选择这些区间。
试补全程序。
1 #include <iostream>2 3 using namespace std;4 5 const int MAXN = 5000;6 int n, m;7 struct segment { int a, b; } A[MAXN];8 9 void sort() // 排序10 {11 for (int i = 0; i < n; i++)12 for (int j = 1; j < n; j++)13 if (①)14 {15 segment t = A[j];16 ②17 }18 }19 20 int main()21 {22 cin >> n >> m;23 for (int i = 0; i < n; i++)24 cin >> A[i].a >> A[i]・b;25 sort();26 int p = 1;27 for (int i = 1; i < n; i++)28 if (③)29 A[p++] = A[i];30 n = p;31 int ans =0, r = 0;32 int q = 0;33 while (r < m)34 {35 while (④)36 q++;37 ⑤;38 ans++;39 }40 cout << ans << endl;41 return 0;42 }④处应填( )