http://acm.hdu.edu.cn/showproblem.php?pid=2037
以节目结束时间作为贪心搜索的依据。
证明贪心算法在此问题中适用:
(反证法)
如图所示……
AC代码:
#include <iostream>
using namespace std;
int int_comp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
struct tv{
int end, start;
}cctv[107];
int main()
{
//freopen("E:\\input.txt", "r", stdin);
int n;
while(cin >> n, n != 0)
{
for(int i=0; i<n; i++)
cin >> cctv[i].start >> cctv[i].end;
qsort(cctv, n, 2*sizeof(int), int_comp);
//按结束时间排序后,逐个扫描所有节目,如果不和之前的冲突,说明可以完整观看
//然后totalcount加一
int total_count = 1;
int local__time = cctv[0].end;
for(int j=1; j<n; j++)
{
if (cctv[j].start < local__time)
continue;
else
{
local__time = cctv[j].end;
total_count++;
}
}
cout << total_count << endl;
}
return 0;
}