poj1018

题目大意:

一套系统需要几个设备,每个设备有几个不同的制造商。不同的制造商在最大带宽和价格方面不同。整个系统的带宽我们指选择的设备的最小带宽,价格是总和。我们的目标是选择设备使得B/P最大

解题思路:

贪心算法+遍历

代码如下:

#include<stdio.h>

#include<string.h>



int main()

{

       int i,j,k,m,min,max,high,low,t,sum;

       int b[101][101],p[101][101],num[101],flag[32767];

       double b_p,mmax;

       scanf("%d",&t);    

       while(t--)                 

       {

              memset(flag,0,sizeof(flag));
              high=32767;

              low=32767;

              scanf("%d",&m);                      

              for(i=0;i<m;i++)

              {

                     min=10000;

                     max=1;

                     scanf("%d",&num[i]);
                     for(j=0;j<num[i];j++)

                     {

                            scanf("%d",&b[i][j]);

                            scanf("%d",&p[i][j]);

                            flag[b[i][j]]=1;

                            if(max<b[i][j])

                                   max=b[i][j];                                 

                            if(min>b[i][j])

                                   min=b[i][j];     

                     }

                     if(low>min)

                            low=min;

                     if(high>max)
                            high=max;       

              }                                        

              mmax=0;

              for(i=low;i<=high;i++)
              {

                     if(flag[i])

                     {

                            sum=0;                           

                            for(j=0;j<m;j++)   

                            {                                 

                                   min=32767;    

                                   for(k=0;k<num[j];k++)

                                   {

                                          if(i <=b[j][k])

                                          {

                                                 if(min>p[j][k])

                                                        min=p[j][k];

                                          }

                                   }

                                   sum+=min;                                  

                            }

                            b_p=(double)i/(double)sum; 

                            if(mmax<b_p)

                                   mmax=b_p;

                     }

              }

              printf("%.3lf\n",mmax);

       }

       return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值