今年暑假不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
提交次数:1次(思路是查的)
坑点:贪心算法之活动安排
活动安排:
(1)贪心策略应该每次选取结束时间最早的活动,为未安排的活动留下尽可能多的时间。策略:结束时间单调递增排序。每次判断下一次活动起始时间是否**>=上一次活动结束时间,同时更新判断的结束时间**
#include<iostream>//贪心算法 最先结束为最优解 查
#include<algorithm>
using namespace std;
struct time{
int Ti_s;
int Ti_e;
};
bool cmp(struct time s,struct time e){
return s.Ti_e<e.Ti_e;
}
int main(){
int n;
while(cin>>n&&n!=0){
int cnt=1;
struct time t[n];
for(int i=0;i<n;i++){
cin>>t[i].Ti_s>>t[i].Ti_e;
}
sort(t,t+n,cmp);//排序结束时间
int ee=t[0].Ti_e;
for(int i=0;i<n-1;i++){
if(t[i+1].Ti_s>=ee){
cnt++;
ee=t[i+1].Ti_e;//若>=更新结束时间
}
}
cout<<cnt<<endl;
}
return 0;
}