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;}