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;
    }
    
  • 相关阅读:
    百度贴吧营销实战之推广入口布局技巧
    微信加人限制2017版
    百度经验怎么赚钱之练就三星经验,轻松布局流量入口。
    百科词条 如何创建?客源何在?怎么赚钱?
    人物百科 从词条创建到最终盈利(简剖)
    百度文库营销技巧之文库不为人知的通过率 以及排名推广技巧
    百度知道一周练就5级账号(养号系列一)
    百度知道账号,快速升级必备36计(养号系列二)
    QQ运动,新楛的马桶还在香,营销人不应摒弃。
    裂变营销 流量分散年代 你那样的不可或缺
  • 原文地址:https://www.cnblogs.com/juechen/p/5255967.html
Copyright © 2011-2022 走看看