POJ1018

原创 2015年11月20日 15:30:49

http://poj.org/problem?id=1018这题目有点难理解...

大意是说,现在要买一整套通信设备(由好几个部件组成),给你T组测试数据,每一组都有N种部件,而每一种部件备又有m个生厂商提供,他们有不同的带宽和价格,你可以购买n种生产商的任意一种,但是必须购买所有的部件设备才能运作,现在让你求出各个部件的最小带宽/总价格的最大值

可以用贪心的方法做,此题有多个变量,带宽,价格,部件的数量,然而所求的是最小带宽/价值,所以我们可以求出带宽的范围,然后枚举所有的带宽的可能,而这个带宽是最小带宽,所有选取的带宽都必须》=它(这里其实是一种思考的,假设带宽分别为3,4,5而我取2就已经满足了,这可能会造成我的最小带宽取不到(即其他的都大于它而没有一个等于它)但是此时最小带宽/价值一定小于真正的最下限/价值,所以循环到真正的最下限会自然替代)此时带宽已经确定,只需要求出满足最小下限的最小价格即可。最后不断更新比值的最大值

#include <stdio.h>
 int main()
 {
     int T;
     int n,i,j,k,max,min,min2,sum;
     double ans;
     int a[101][101],b[101][101],c[101];;//a是带宽,b是价格,c是有几个设备供选择
     scanf("%d",&T);
     while(T--)
     {
         scanf("%d",&n);
          max=0;
          min=10000;
         for (i=1;i<=n;i++)//i是第几个必备的设备
         {
          scanf("%d",&c[i]);
          for (j=1;j<=c[i];j++)//j是第几个选择
          {
          scanf("%d%d",&a[i][j],&b[i][j]);
          if (a[i][j]>max) max=a[i][j];
          if (a[i][j]<min) min=a[i][j];//找出带宽的上下限范围
          }
         }
         ans=0;
         for (k=min;k<=max;k++)//枚举带宽
         {
         sum=0;
         for (i=1;i<=n;i++)
         {
            min2=10000;//max2是计算每一种必备设备的最小价格
            for (j=1;j<=c[i];j++)
             if ((a[i][j]>=k)&&(b[i][j]<min2))
                min2=b[i][j];
                sum=sum+min2;//sum是每一种带宽固定下,满足所有设备的最小价格(其中每一个设备都尽量取最小值)
        }
        if (ans<k*1.0/sum)
            ans=k*1.0/sum;
         }
         printf("%.3f\n",ans);
         }
         return 0;
 }


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

poj1018

Communication System Description We have received an order from Pizoor Communications Inc. for...

POJ 1018 - Communication System

Description We have received an order from Pizoor Communications Inc. for a special communication s...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

POJ 1018

#include #include #include #include using namespace std; int a[20000];// 保存带宽的总数 int mtab[100];//保存...

poj1018 动态规划

题意:一套通讯系统由一些设备组成,每种设备由不同的供应商供应,每个供应商供应的同种设备有各自的带宽(bandwidth)和价格(prices)。通讯系统的带宽(B)指的是组成该系统的所有设备的带宽的最...

POJ 1018--Communication System

poj 1018

poj 1018 dp

#include #include #define INF 0x3f3f3f3f #define MAX(x,y) ((x)>(y)?(x):(y)) #define MIN(x,y) ((x)>(y...

CF gym100851B-Generators/POJ1018-Communication System

暴力最优化问题处理: CF gym100851B-Generators 题意:给定一个生成随机数序列的公式,xi+1 = (axi + b) mod c,给定n组参数,求出在每个生成的序列中选出的...

poj1018Communication System dp

//一个系统需要n个设备,每个设备有不同的生产厂家,不同的厂家的设备的性能和价格不同 //现在问要这个系统的B/P的最大值,B是N个设备性能最差的性能,P是n个设备的价格 //dp[i][j] 表示前...
  • cq_pf
  • cq_pf
  • 2015-08-01 16:49
  • 366
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)