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;
    }
    
  • 相关阅读:
    字符串子串
    素数
    DP4056替代LTC4056/TP4056锂电池充电保护芯片_1000mA
    DP4054替代LTC405x系列500mA锂电池充电芯片
    Ci522替代MFRC522手机NFC开锁应用13.56Mhz读写器芯片
    node补充dom环境
    springCloud组件详细解析
    23种设计模式——代理模式
    redis实现接口限流
    JVM常用调优参数以及linux服务器启动项目命令jvm参数调优案例
  • 原文地址:https://www.cnblogs.com/juechen/p/5255967.html
Copyright © 2011-2022 走看看