您的位置:首页 > 其它

uva 10020 Minimal coverage(贪心-最小覆盖问题)

2015-02-20 00:12 337 查看
题目大意:给出一个范围M,然后给出若干的区间,以0 0 终止, 要求用最少的区间将0 ~M 覆盖,输出最少个数以及方案。

解题思路:典型的区间覆盖问题,算法竞赛入门经典P154上有讲。

#include <cstdio>

int main() {
int T, arr[100005][2], ans[100005];
scanf("%d", &T);

while (T--) {
int m, n, cnt, cur, s;
scanf("%d", &m);
for (n = 0; scanf("%d%d", &arr
[0], &arr
[1]), arr
[0] || arr
[1]; n++);

for (cur = cnt = 0; cur < m; cnt++, cur = s) {
s = cur;
for (int i = 0; i < n; i++)
if (arr[i][0] <= cur && arr[i][1] > s) {
s = arr[i][1];
ans[cnt] = i;
}

if (s == cur) {
cnt = 0;
break;
}
}

printf("%d\n", cnt);
for (int i = 0; i < cnt; i++)
printf("%d %d\n", arr[ans[i]][0], arr[ans[i]][1]);
printf(T ? "\n" : "");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: