极致性价比问题
先求出性价比排名,再按照性价比高低从上向下依次录取
#include<iostream>
#include<algorithm>
using namespace std;
struct TIME
{
int start;
int end;
bool flag=0;
};
bool cmp(TIME a,TIME b)
{
if(a.start==b.start)
return a.end<b.end;
return a.start<b.start;
}
int main()
{
int a,b,flag1,jishu1,jishu2;//jishu1为安排过的会议的数量,jishu2为使用的会场数
TIME time[10100];
while(cin>>a&&a)
{
jishu1=0,jishu2=0;
for(int i=0; i<a; i++)
cin>>time[i].start>>time[i].end;
sort(time,time+a,cmp);
for(int i=0; i<a; i++)
{
if(time[i].flag==0)
{
jishu1++;
flag1=time[i].end;
for(int j=i+1; j<a; j++)
{
if(time[j].flag==0)
if(time[j].start>=flag1)
{
time[j].flag=1;
flag1=time[j].end;
jishu1++;
}
}
jishu2++;
}
if(jishu1==a)
break;
}
printf("%d\n",jishu2);
}
}