POJ 1018 Communication System

//此题是DP问题,可是我一直没有想出公式
//组后只能根据带宽来枚举,再采用贪心策略

 

#include < iostream >
using   namespace  std;

int  main()
{
    
int  a[ 101 ][ 202 ],num[ 101 ],n,i,j,k,h,temp,tt;
    
int  minb,minp,sump;
    
float  bp,max;
    cin
>> tt;
    
while (tt -- )
    {
        max
= 0 ;
        scanf(
" %d " , & n);
        
for (i = 0 ;i < n; ++ i)
        {
            scanf(
" %d " , & num[i]);
            
for (j = 0 ;j < num[i]; ++ j)
                scanf(
" %d%d " , & a[i][j], & a[i][j + 100 ]);
        }
        
for (i = 0 ;i < n; ++ i)
            
for (j = 0 ;j < num[i]; ++ j)
            {
                minb
= a[i][j];
                sump
= a[i][j + 100 ];
                
for (k = 0 ;k < n; ++ k)
                {
                    
if (k == i)  continue ;
                    minp
= 100000 ;
                    
for (h = 0 ;h < num[k]; ++ h)
                        
if (a[k][h] >= minb && minp > a[k][h + 100 ])
                            minp
= a[k][h + 100 ];
                    sump
+= minp;
                    
if (minp == 100000 )
                        
break ;
                }
                
if (minp == 100000 break ;
                bp
= float (minb) / sump;
                
if (bp > max) max = bp;
            }
            printf(
" %.3f\n " ,max);
    }
    
    
return   1 ;
}

 

 

你可能感兴趣的:(System)