zoukankan      html  css  js  c++  java
  • Communication System(dp)

    Communication System
    Time Limit: 1000MS Memory Limit: 10000K
    Total Submissions: 25006 Accepted: 8925

    Description
    We have received an order from Pizoor Communications Inc. for a special communication system. The system consists of several devices. For each device, we are free to choose from several manufacturers. Same devices from two manufacturers differ in their maximum bandwidths and prices.
    By overall bandwidth (B) we mean the minimum of the bandwidths of the chosen devices in the communication system and the total price (P) is the sum of the prices of all chosen devices. Our goal is to choose a manufacturer for each device to maximize B/P.

    Input
    The first line of the input file contains a single integer t (1 ≤ t ≤ 10), the number of test cases, followed by the input data for each test case. Each test case starts with a line containing a single integer n (1 ≤ n ≤ 100), the number of devices in the communication system, followed by n lines in the following format: the i-th line (1 ≤ i ≤ n) starts with mi (1 ≤ mi ≤ 100), the number of manufacturers for the i-th device, followed by mi pairs of positive integers in the same line, each indicating the bandwidth and the price of the device respectively, corresponding to a manufacturer.

    Output
    Your program should produce a single line for each test case containing a single number which is the maximum possible B/P for the test case. Round the numbers in the output to 3 digits after decimal point.

    Sample Input

    1 3
    3 100 25 150 35 80 25
    2 120 80 155 40
    2 100 100 120 110

    Sample Output

    0.649

    Source
    Tehran 2002, First Iran Nationwide Internet Programming Contest
    以前做这道题的时候是用的贪心,不太明白,现在用Dp明白了;

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <queue>
    #include <map>
    #include <algorithm>
    #define INF 0x3f3f3f3f
    using namespace std;
    
    typedef long long LL;
    
    const int MAX = 1e5+10;
    
    int Dp[120][1200];//买i件设备时,最小值为k时的花费
    
    int main()
    {
        int n,T,m,b,p;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            memset(Dp,INF,sizeof(Dp));
            for(int i=0;i<=1200;i++)//当没有一件设备是,自然p为零
            {
                Dp[0][i]=0;
            }
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&m);
                for(int j=1;j<=m;j++)
                {
                    scanf("%d %d",&b,&p);
                    for(int k=0;k<1200;k++)
                    {
                        if(b<=k)//当买的b值比k值小时,说明在你买的设备中最小的为b,所以在买i-1件设备中花费+p与Dp[i][b]取小值
                        {
                            Dp[i][b]=min(Dp[i-1][k]+p,Dp[i][b]);
                        }
                        else
                        {
                            Dp[i][k]=min(Dp[i][k],Dp[i-1][k]+p);//买的b值比k值大时,k是买的设备中的最小值,同理
                        }
                    }
                }
            }
            double ans=0;
            for(int i=1;i<1200;i++)
            {
                if(Dp[n][i]!=INF)
                {
                    if(ans<(i*1.0/Dp[n][i]))//遍历找出b/p的最大值
                    {
                        ans=(i*1.0/Dp[n][i]);
                    }
                }
            }
            printf("%.3f
    ",ans);
        }
    
        return 0;
    }
    
  • 相关阅读:
    Vue 中动态添加class(使用v-bind:class)
    Vue 过滤器的使用
    Huxley 是一个用于Web应用 UI 测试的工具
    showmessage函数里
    [Php] PHPExcel读取Excel文件(或来自客户端上传的)并返回二维数组
    async-validator -- git地址
    Antd Upload组件上传文件至php后端, php拿到对应的文件名(二: vue实现)
    Antd Upload组件上传文件至php后端, php拿到对应的文件名
    对数据库中一个timestamp类型字段时间上作加减
    小学生作文怎么辅导?
  • 原文地址:https://www.cnblogs.com/juechen/p/5255967.html
Copyright © 2011-2022 走看看