最小区间覆盖UVA 10020
来源:互联网 发布:it团队建设方案 编辑:程序博客网 时间:2024/04/28 12:09
#经典的最小区间覆盖问题;
#首先假设当前已经覆盖到了st点,接下来所选的区间[x,y]应该是x<=st,且y值应该最大的那个区间,此时st变为了y;所以我们应该根据y值从大到小进行排序,再进行选择;
#思路:把区间按b值从大到小排序,扫描到符合上述条件的区间,就直接加进去;
#代码:
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std; int t;int start, end, qn, outn;struct M { int start; int end;} q[100005], out[100005]; int cmp (M a, M b) {//按最大能覆盖到排序 return a.end > b.end;}int main() { scanf("%d", &t); while (t --) { qn = 0; outn = 0; start = 0; scanf("%d", &end); while (~scanf("%d%d", &q[qn].start, &q[qn].end) && q[qn].start + q[qn].end) { qn ++; } sort(q, q + qn, cmp); while (start < end) { int i; for (i = 0; i < qn; i ++) { if (q[i].start <= start && q[i].end > start) { start = q[i].end;//更新区间 out[outn ++] = q[i]; break; } } if (i == qn) break;//如果没有一个满足条件的区间,直接结束。 } if (start < end) printf("0\n"); else { printf("%d\n", outn); for (int i = 0; i < outn; i ++) printf("%d %d\n", out[i].start, out[i].end); } if (t) printf("\n"); } return 0;}
0 0
- 最小区间覆盖UVA 10020
- UVA10020(最小区间覆盖)
- UVa 10020 - Minimal coverage(区间覆盖)
- UVa 10020 Minimal coverage (贪心&区间覆盖)
- uva 10020 Minimal coverage(贪心,区间覆盖)
- UVA 10382区间覆盖
- UVA 10020 Minimal coverage(最小覆盖问题)
- UVA - 1615 Highway 区间覆盖
- UVA - 1615 Highway 区间覆盖
- uva 10382区间覆盖贪心
- UVA 10020 - Minimal coverage (贪心) 区间覆盖问题
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
- UVA 10020 Minimal coverage 区间覆盖问题 贪心
- UVA 10020 简单贪心区间覆盖,各种WA,记录一下
- UVa 10020 - Minimal coverage(区间覆盖、贪心)
- uva 10020- Minimal coverage (贪心思想 简单区间覆盖)
- UVA - 10020 Minimal coverage(区间覆盖问题)
- uva 10020 Minimal coverage 【贪心】+【区间完全覆盖】
- UVA Just the Facts
- HDU 4553 约会安排(二维线段树)
- 用算法和数学奠定专业基础
- NYOJ 孪生素数问题
- java中char和string float与double区别
- 最小区间覆盖UVA 10020
- 指针的指针作用
- PHP两个日期之间的所有日期
- Java实现全排列
- 相邻元素差的绝对值都是1,在这样的数组中找目标元素
- 理解指向指针的引用
- 可持久化(非旋转式)treap 学习记录
- mysql 安装简介
- matlab max/min函数