poj 1018

来源:互联网 发布:陕西省大数据集团领导 编辑:程序博客网 时间:2024/06/05 19:15
/*poj 1018*/#include <iostream>//#include <fstream>#include <algorithm>#include <iomanip>using namespace std;#define SIZE 103#define mmax(a,b) (a>b)?a:btypedef struct _node{    int _b;    double _p;}node;int cmp(const void *a,const void * b);node a[SIZE][SIZE];int b[SIZE*SIZE];int size[SIZE];  //每一行的设备的个数 int maxb[SIZE];//fstream fin;int main(){    //fin.open("1018.txt",ios::in);    int t;    cin>>t;        while(t--)    {       int n;       cin>>n;                     int i,j,k;       int count=0;              memset(maxb,0,sizeof(maxb[0])*SIZE);       for(i=0;i<n;i++)       {           int t;           cin>>t;           size[i]=t;           for(j=0;j<t;j++)           {                cin>>a[i][j]._b>>a[i][j]._p;                b[count++]=a[i][j]._b;                                maxb[i]=mmax(a[i][j]._b,maxb[i]);           }           }               //qsort       qsort(b,count,sizeof(b[0]),cmp);           double sum,max,temp;       sum=max=temp=0;       bool flag=false;       for(i=0;i<count-n+1;i++)       {             sum=0;           for(j=0;j<n;j++)           {               if(b[i]>maxb[j])               {                   flag=true;                   break;              //剪枝很大                }                              double min=100000; //INL               for(k=0;k<size[j];k++)               {                   if(a[j][k]._b>=b[i]&&min>a[j][k]._p)                     min=a[j][k]._p;               }               sum+=min;           }                      if(flag)             break;           temp=b[i]*1.0/sum;           if(max<temp)             max=temp;                  }        cout<<fixed<<setprecision(3)<<max<<endl;        //printf("%.3lf\n",max);     }    system("pause");    return 0;}int cmp(const void *a,const void *b){    return *(int *)a-*(int *)b;}