题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037
题目是经典的活动安排问题,按照结束时间升序排序,尽量做结束的早的事情,以便留下更多的时间给剩下的事情,根据节目结束的时间进行排序后,可以使用逐步的贪婪算法求出最优解。
#include <stdio.h> struct TV { int s,e; }t[101],temp; int main() { int n, sum, end, i, j; while(scanf("%d",&n) && n) { for(i=0; i < n; i++) { scanf("%d%d",&t[i].s,&t[i].e); } for(i = 0; i < n; i++) //根据节目结束的时间进行升序排序 for(j = i; j < n; j++) { if(t[i].e > t[j].e) { temp = t[i]; t[i] = t[j]; t[j] = temp; } } sum = 1; //从这一步开始计算可以观看的节目数 end = t[0].e; for(i = 1; i < n; i++) { if(t[i].s >= end) { sum++; end = t[i].e; } } printf("%d\n",sum); } return 0; }