看电影
题目
终于到周末了,明明是特别喜欢看电影。他想在一天内尽量多的看到完整的多部电影。 现在他把他喜欢的电影的播放时间表给你,希望你能帮他合理安排。
输入格式
输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。当n=0时,输入结束。
输出格式
对于每组输入,输出能完整看到的电影的个数。
输入样例
在这里给出一组输入。例如
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
输出样例
在这里给出相应的输出。例如
5
实现代码
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define MAXN 10000
int movieAllNum = 0;//电影总部数
int movieWatch = 0;//最大可观看电影部数
struct movie{
int starttime;
int endtime;
}movieSee[MAXN];
void input(){
int i;
for(i = 0;i < movieAllNum;i++){
cin>>movieSee[i].starttime;
cin>>movieSee[i].endtime;
}
}
bool cmp(movie a,movie b){
return a.endtime < b.endtime;
}
void calculate(){
int i = 0;
int finaltime = movieSee[i].endtime;
movieWatch ++;
for(i = 1;i < movieAllNum;i++){
if(finaltime <= movieSee[i].starttime){
movieWatch++;
finaltime = movieSee[i].endtime;
}
}
cout<<movieWatch<<endl;
}
void clear(){
int i;
for(i = 0;i < movieAllNum;i++){
movieSee[i].starttime = 0;
movieSee[i].endtime = 0;
}
movieWatch = 0;
movieAllNum = 0;
}
int main(){
cin>>movieAllNum;
while(movieAllNum != 0){
input();
sort(movieSee,movieSee + movieAllNum,cmp);
calculate();
clear();
cin>>movieAllNum;
}
}
活动选择问题
题目
输入格式
输出格式
输出最多能安排的活动个数。
输入样例
11
3 5
1 4
12 14
8 12
0 6
8 11
6 10
5 7
3 8
5 9
2 13
输出样例
4
样例解释
安排的4个活动为1 4, 5 7, 8 11和12 14。
实现代码
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define MAXN 10000
int allActivities = 0;//活动总个数
int useActivities = 0;//最大可安排的个数
struct activity{
int starttime;
int endtime;
}arrActivities[MAXN];
void input(){
cin>>allActivities;
int i;
for(i = 0;i < allActivities;i++){
cin>>arrActivities[i].starttime;
cin>>arrActivities[i].endtime;
}
}
bool cmp(activity a,activity b){
return a.endtime < b.endtime;
}
void calculate(){
int i = 0;
int finaltime = arrActivities[i].endtime;
useActivities ++;
for(i = 1;i < allActivities;i++){
if(finaltime <= arrActivities[i].starttime){
useActivities ++;
finaltime = arrActivities[i].endtime;
}
}
cout<<useActivities;
}
int main(){
input();
sort(arrActivities,arrActivities + allActivities,cmp);
calculate();
}
注意事项
两道题的输入输出格式是有差异的!!