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


相关文章推荐

openjudge poj 1018假币问题

  • 2012年04月20日 21:07
  • 2KB
  • 下载

POJ1018-Communication System

  • 2011年08月10日 19:05
  • 41KB
  • 下载

poj1018 枚举加贪心

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

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...
  • Sureina
  • Sureina
  • 2016年08月22日 13:50
  • 153

POJ 1018

#include #include #include #include using namespace std; int a[20000];// 保存带宽的总数 int mtab[100];//保存...
  • iphxer
  • iphxer
  • 2012年01月17日 12:33
  • 328

poj1018 动态规划

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

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...
  • sky_zdk
  • sky_zdk
  • 2017年04月30日 22:04
  • 75

CF gym100851B-Generators/POJ1018-Communication System

暴力最优化问题处理: CF gym100851B-Generators 题意:给定一个生成随机数序列的公式,xi+1 = (axi + b) mod c,给定n组参数,求出在每个生成的序列中选出的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ1018
举报原因:
原因补充:

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