区间贪心
给定一系列的区间,让你进行安排;
本题给定一系列区间,求最多的独立区间数,先用pair或者struct进行储存,然后自定义sort对区间有右端点进行排序
然后int t=0,t与前端点进行比较,小于等于前端点则为独立区间,t变成当前点的右端点
解释:
对结束时间排序的原因是因为,把最早结束的必须安排,如果后面出现于最早结束时间相重
合,那可以不管后面的那个
比如
1 4和2 4
明显第二个时间短,但选第一个和第二个都一样
如果有结束时间更短的,那么第一个就是更短的那个。
但如果需要保障时间最长的话,那就需要其他条件了,这个只是求出最长独立区间个数
4
1 3
4 6
2 5
1 7
排序
1 3
2 5
4 6
1 7
然后t=0;
开始遍历,
t<=1,则ans=1,t=3;
t>2,则不管第二个数
t<=4,ans=2,t=6
t>1,则不管第四个数
A题和H题
题目链接:
https://ac.nowcoder.com/acm/contest/950/A
https://ac.nowcoder.com/acm/contest/950/H
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1005;
bool cmp(pair<int,int>a,pair<int,int>b){
return a.second < b.second;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n){
pair<int,int>g[maxn];
for(int i=0;i<n;i++){
scanf("%d%d",&g[i].first,&g[i].second);
}
sort(g,g+n,cmp);//对pair的排序,默认是对first排序
int t=0,ans=0;
for(int i=0;i<n;i++){
if(g[i].first>=t){
t=g[i].second;
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}