zoj 1409 Communication System

来源:互联网 发布:python 程序 编辑:程序博客网 时间:2024/05/01 12:10

对每一个带宽求最大的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;
}