【动态规划】——POJ 1018 Communication System

原创 2013年12月04日 13:52:14

转载请注明出处:http://blog.csdn.net/a1dark

分析:这题其实可以用搜索写、以前用搜索做过这道题、不过既然是练DP、那便DP吧、

//dp[i][j]表示选了前i件商品,最小带宽为j时的价值总和
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=105;
const int maxm=10005;
int b[maxn];
int p[maxn];
int dp[maxn][maxm];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,m;
        memset(dp,-1,sizeof(dp));
        scanf("%d",&n);
        int maxb=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&m);
            for(int j=1;j<=m;j++){
                scanf("%d%d",&b[j],&p[j]);
                maxb=max(maxb,b[j]);
            }
            if(i==1){//第一层直接初始化
                for(int j=1;j<=m;j++)
                    dp[i][b[j]]=p[j];
                continue;
            }
            for(int k=0;k<=maxb;k++){
                if(dp[i-1][k]==-1)continue;
                for(int j=1;j<=m;j++){
                    int mb=min(k,b[j]);//当选择第J个厂商时、取当前最小的带宽
                    if(dp[i][mb]==-1)//如果这种带宽没有别的组合达到、则直接由上一层加
                        dp[i][mb]=dp[i-1][k]+p[j];
                    else//如果这种组合已经有值了、则选择小的
                        dp[i][mb]=min(dp[i][mb],dp[i-1][k]+p[j]);
                }
            }
        }
        double ans=0;
        for(int i=0;i<=maxb;i++)//遍历每一种带宽的对应的最小总价格
            ans=max(ans,(1.0*i)/(double)dp[n][i]);
        printf("%.3f\n",ans);
    }
    return 0;
}


版权声明:本文为博主原创文章,转载请注明出处 http://blog.csdn.net/a1dark

相关文章推荐

POJ1018-Communication System

转载请注明出处:優YoU    大致题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方...

poj 1018 Communication System

题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwid...

POJ 1018 Communication System(贪心+优化)

题目描述:有n种仪器,第i种仪器有m_i个供应商,不同供应商提供的同一种仪器有不同的带宽(B)和价格(p), n种仪器总带宽为所有仪器带宽最小值。要求从每种仪器的供应商中选一个,使得最终总带宽除以总价...
  • szhouan
  • szhouan
  • 2016年11月29日 19:16
  • 134

POJ1018贪心(多路归并的想法)

题意:      有n个服务器,每个服务器都要安装网线(必须也只能安装一个),然后每个服务器都有mi种选择网线的方式,每种方式两个参数,一个是速度b,另一个是价钱p,然后让你找到一个最大的比值 mi...

POJ1018Communication System题解动态规划DP

Communication SystemTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 12607 Accepted: 4377De...

poj1018 - Communication System

题目大意:有一个系统,这个系统由n种设备组成,现在每种设备有m个,设备有两种属性 一个是带宽,一个是价格 每种设备取一个,取满n个,怎么才能使所有带宽总和/总价格最大 解题思路:动态规划,dp[...

POJ 1018. Communication System 动态规划解法

POJ 1018. Communication System 动态规划解法 题意简述 c++AC代码 简单测试样例 输出结果...

poj算法题1018——Communication System

Communication SystemDescriptionWe have received an order from Pizoor Communications Inc. for a speci...

poj1018 动态规划

题意:一套通讯系统由一些设备组成,每种设备由不同的供应商供应,每个供应商供应的同种设备有各自的带宽(bandwidth)和价格(prices)。通讯系统的带宽(B)指的是组成该系统的所有设备的带宽的最...
  • aidway
  • aidway
  • 2016年03月02日 22:55
  • 365

POJ1018-Communication System

  • 2011年08月10日 19:05
  • 41KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【动态规划】——POJ 1018 Communication System
举报原因:
原因补充:

(最多只允许输入30个字)