0
已解决
曹博扬
初级天翼
初级天翼
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,st,m;
struct f{
int x,y;
}a[10100];
bool cmp(f a,f b){
if(a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
int c=0;
st=-1;
for(int j=i+1;j<=n;j++){
if(a[j].x>a[i].y){
c++;
st=max(a[j].y,st);
}
}
m=max(c,m);
}
cout<<m;
return 0;
}
0分代码
哪错了????????
谁让我满分我就关注他()
0
已采纳
包涵宇
中级天翼
中级天翼
你这思路有问题,我也没法帮你啊~
思路:按结束时间从小到大排序
定义一个变量,记录结束时间
然后循环{
如果这个数的开始时间<记录结束时间的变量{
计时器++
记录结束时间的变量=这个数结束的时间
}
}
最后输出计数器即可
ps:这能叫思路吗?这都是代码了!!!
0
0
陈正朔
初级光能
初级光能
你学过贪心的区间问题吗?(代码有些离谱)
首先是排序规则
注意
尽量先安排结束时间早的区间,举不出反例,我们可以这样考虑它的合理性:先安排结束时间早的区间,则会遗留更多的时间以供安排,这对我们安排尽量多的区间是有利的。
代码应该是
return a.ed<b.ed;
之后是第二个for循环
应该改成
int end=-1;
for(int i=1;i<=n;i++){
if(a[i].st>=end){//如果这个区间的开始时间在上一个区间的结束时间之后,则可以选择
cnt++;
end=a[i].ed; //结束时间更新
}
}
我的st就是你的x,我的ed就是你的y