題目鏈接: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;
}
小結:找到了對的貪心策略就沒問題。