http://acm.hdu.edu.cn/showproblem.php?pid=2037
Problem Description “今年暑假不AC?”
Input 输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
Output 对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
Sample Input 12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
Sample Output 5 |
利用贪心算法的思想,在保证当前项目的开始时间晚于上一个项目的结束时间,选择一个最早结束的项目
#include<iostream>
using namespace std;
int main() {
int begin[200], end[200];
int n;
while (cin >> n && n) {
for (int i = 0; i < n; i++)
cin >> begin[i] >> end[i];
int result = 0;
int ending = 0, flag = 0, minend = 0, maxend = 0,maxbegin = 0;
for (int i = 0; i < n; i++) {
if (maxend < end[i])
maxend = end[i];
if (maxbegin < begin[i])
maxbegin = begin[i];
}
while(ending <=maxbegin){
minend = 1000000;
for (int i = 0; i < n; i++) {
if (begin[i] >= ending) {
if (minend > end[i])
{
minend = end[i];
flag = i;
}
}
}
ending = end[flag];
result++;
}
cout << result << endl;
}
return 0;
}