题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037
题意:给出多个节目起始和结束时间,输出最多能看多少个节目
题解:贪心算法题目的关键点在于选择合适的贪心策略,这个题目的贪心策略是每次找结束时间最早的节目,当然节目的开始时间要大于当前时间。
AC代码:
#include"algorithm"
using namespace std;
typedef struct Tv{
int start;
int end;
};
bool cmp(Tv a,Tv b){
if(a.end<b.end) return true;
else if(a.end == b.end && a.start<b.start) return true;
return false;
}
int main(int argc, char** argv) {
int n;
while(cin>>n&&n!=0){
Tv tv[105];
for(int i = 0;i<n;i++)
cin>>tv[i].start>>tv[i].end;
sort(tv,tv+n,cmp);
int sum = 0;
int now = 0;
int i = 0;
while(i<n){
if(tv[i].start >= now){
now = tv[i].end;
sum++;
i++;
}else{
i++;
}
}
cout<<sum<<endl;
}
return 0;
}
小结:找到了对的贪心策略就没问题。