我的独立博客来了
很水的贪心
-
先按照结束时间sort,因为越早结束的节目越好
-
选择接受的收音机是优先选择潜力小的收音机,因为潜力大的收音机留在后面可能更有用
-
return 0;
下面是代码
#include<bit/stdc++.h>
using namespace std;
int read() {
register int x=1,ans=0;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') x*=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ans=ans*10+ch-48;ch=getchar();}
return x*ans;
}
const int N=155;
struct dat {
int a,b;
}d[N];
int cnt;
bool cmp(dat a,dat b) {
if(a.b==b.b) return a.a>b.a;
return a.b<b.b;
}
int main() {
int n=read();
for(register int i=1;i<=n;i++) {
d[i].a=read(); d[i].b=read();
}
sort(d+1,d+n+1,cmp);
int cpu0=0,cpu1=0;//不要问我为什么起这个名字,一开始我把这个抽象成了电脑cpu的多核调度,后来发现我的建模是错的......
for(register int i=1;i<=n;i++) {
if(cpu0<cpu1) {int t=cpu0; cpu0=cpu1; cpu1=t;}//将潜力小的收音机放在前面
if(cpu0<=d[i].a) {//调用收音机1
cnt++; cpu0=d[i].b;
}
else if(cpu1<=d[i].a) {//调用收音机2
cnt++; cpu1=d[i].b;
}
}
printf("%dn",cnt);
return 0;
}