第39題
(最小區(qū)間覆蓋)給出 n 個區(qū)間,第 i 個區(qū)間的左右端點是[ai,bi]?,F在要在這些區(qū)間中選出若干個,使得區(qū)間 [0,m][0,m] 被所選區(qū)間的并覆蓋(即每一個 0≤i≤m 都在某個所選的區(qū)間中)。保證答案存在,求所選區(qū)間個數的最小值。
輸入第一行包含兩個整數 n 和 m(1≤n≤5000, 1≤m≤109)。
接下來 n 行,每行兩個證書 ai,bi(0≤ai,bi≤m)。
提示:使用貪心法解決這個問題。先用 Θ(n^2) 的時間復雜度排序,然后貪心選擇這些區(qū)間。
試補全程序。
#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;
}
① 處應填( )