PKU 1018 Communication System

来源:互联网 发布:超星尔雅网络课程登录 编辑:程序博客网 时间:2024/06/03 14:53
题目:http://poj.org/problem?id=1018题意:有一个系统有n个设备,每个设备有m个制造商,每个制造商制造的设备的最大带宽和价值是不同的,      题目要求计算n个设备组成的系统中最小的带宽和总价值的最大值,有点绕~~抓狂思路:选出所有设备的最大带宽和最小带宽,然后从最小带宽枚举到最大带宽,找出每种设备价值最小切带宽大于当前当前带宽~~
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int maxn=100;const int inf=0x7fffffff;int t, n, m[maxn+10];int b[maxn+10][maxn+10], p[maxn+10][maxn+10];int maxb, minb, price, minp;double ans;int main(){    //freopen("in.txt", "r", stdin);    scanf("%d", &t);    while (t--)    {        maxb=-inf, minb=inf;        scanf("%d", &n);        for (int i=0; i<n; i++)        {            scanf("%d", &m[i]);            for (int j=0; j<m[i]; j++)            {                scanf("%d %d", &b[i][j], &p[i][j]);                maxb=max(maxb, b[i][j]);                minb=min(minb, b[i][j]);            }        }        ans=0.0;        for (int i=minb; i<=maxb; i++)        {            price=0;            for (int j=0; j<n; j++)            {                minp=32767;                for (int k=0; k<m[j]; k++)                {                    if (b[j][k]>=i&&p[j][k]<minp) minp=p[j][k];                }                price+=minp;            }            double tem=1.0*i/price;            if (tem>ans) ans=tem;        }        printf("%0.3f\n", ans);    }    return 0;}