首页 > 其他 > 详细

1018 Communication System

时间:2019-09-14 09:14:29      阅读:115      评论:0      收藏:0      [点我收藏+]

题目:

描述
我们收到了Pizoor Communications Inc.的特殊通信系统订单。该系统由多个设备组成。对于每个设备,我们可以从几个制造商中自由选择。来自两家制造商的相同设备的最大带宽和价格不同。
总带宽(B)是指通信系统中所选设备的带宽的最小值,总价格(P)是所有选定设备的价格之和。我们的目标是为每个设备选择一个制造商以最大化B / P.
输入
输入文件的第一行包含一个整数t(1≤t≤10),测试用例的数量,后跟每个测试用例的输入数据。每个测试用例以包含单个整数n(1≤n≤100)的行开始,通信系统中的设备数量,后面是以下格式的n行:第i行(1≤i≤n)从mi(1≤mi≤100)开始,第i个设备的制造商数量,然后是同一行中的mi对正整数,分别表示设备的带宽和价格,对应于制造商。
输出
您的程序应为每个包含单个数字的测试用例生成一行,该数字是测试用例的最大可能B / P.将输出中的数字四舍五入到小数点后的3位数。
样例输入
1 3
3 100 25 150 35 80 25
2 120 80 155 40
2 100 100 120 110
样例输出
0.649

//232K    47MS    C++    1164B    2014-05-07 19:16:42
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
struct node{
    int b;
    int p;
}a[105][105];
int b[105];
int n;
inline int Max(int x,int y)
{
    return x>y?x:y;
}
inline int Min(int x,int y)
{
    return x<y?x:y;
}
int main(void)
{
    int t,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        int ln=0x7ffffff,rn=0;
        for(int i=0;i<n;i++){
            scanf("%d",&b[i]);
            for(int j=0;j<b[i];j++){
                scanf("%d%d",&a[i][j].b,&a[i][j].p);
                ln=Min(ln,a[i][j].b);
                rn=Max(rn,a[i][j].b);
            }
        }
        double ans=0;
        for(int i=ln;i<=rn;i++){
            int sminn=0;
            for(int j=0;j<n;j++){
                int minn=0x7ffffff;
                for(int k=0;k<b[j];k++){
                    if(a[j][k].b>=i && minn>a[j][k].p)
                        minn=a[j][k].p;
                }
                sminn+=minn;
            }
            ans=ans>(i*1.0/sminn)?ans:(i*1.0/sminn);
            //printf("*****%lf\n",ans);
        }   
        printf("%.3lf\n",ans);
    }
    return 0;
}

来源:https://www.cnblogs.com/GO-NO-1/p/3714459.html

1018 Communication System

原文:https://www.cnblogs.com/sweet-ginger-candy/p/11518188.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!