对每一个带宽求最大的B/P值:把每一种设备的各种厂家产品按价格从低到高排序,对每一种设备,最先满足要求的即为最优。。。。。。。算是贪心吧
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<functional>
using namespace std;
#define E 1e-3
#define M 105
struct data{
int b,p;
}c[M][M];
int num[M],n,cnt,x[105*105];
int cmp(const data &a,const data &b){
if(a.p<b.p) return 1;
else if(a.p==b.p){
if(a.b>b.b)return 1;
else return 0;
}else return 0;
}
int main(){
int T,i,j,k,sum,flag; double max,now;
scanf("%d",&T);
while(T--){
cnt=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&num[i]);
for(j=0;j<num[i];j++){
scanf("%d %d",&c[i][j].b,&c[i][j].p);
x[cnt++]=c[i][j].b;
}
sort(c[i],c[i]+num[i],cmp);
}
max=0;
for(k=0;k<cnt;k++){
sum=0;flag=1;
for(i=0;i<n;i++){
for(j=0;j<num[i];j++)
if(c[i][j].b>=x[k]){
sum+=c[i][j].p; break;
}
if(j==num[i]){flag=0; break;}
}
now=x[k]*1.0/(sum*1.0);
if(flag==1){
if(now-max>=E)max=now;
}
}
printf("%.3f\n",max);
}
return 0;
}