zoukankan      html  css  js  c++  java
  • 【poj1018】 Communication System

    http://poj.org/problem?id=1018 (题目链接)

    题意

      要买n个产品,每个产品有m种价格和宽度(我也不知道翻译过来到底是什么?),设n个产品的宽度的最小值为B,n个产品的价格和为P,要求B/P最大。

    Solution

      dp。题目没说B的取值范围,坑死了。

      f[i][j]表示前i个产品,当B为j时的最小价格。

      转移很好转,具体见代码。

    代码

    // poj1018
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<string>
    #include<cmath>
    #include<map>
    #define MOD 100003
    #define inf 2147483640
    #define LL long long
    #define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
    using namespace std;
    
    const int maxn=110;
    int f[maxn][maxn*maxn],n,m;
    
    int main() {
    	int T;scanf("%d",&T);
    	while (T--) {
    		scanf("%d",&n);
    		for (int i=1;i<=n;i++)
    			for (int j=0;j<1100;j++) f[i][j]=inf;
    		for (int m,i=1;i<=n;i++) {
    			scanf("%d",&m);
    			for (int b,p,j=1;j<=m;j++) {
    				scanf("%d%d",&b,&p);
    				if (i==1) f[i][b]=min(f[i][b],p);
    				else for (int k=0;k<1100;k++) if (f[i-1][k]!=inf) {
    							if (k<=b) f[i][k]=min(f[i][k],f[i-1][k]+p);
    							else f[i][b]=min(f[i][b],f[i-1][k]+p);
    						}
    			}
    		}
    		double ans=0;
    		for (int i=0;i<1100;i++)
    			if (f[n][i]!=inf) ans=max(ans,(double)i/f[n][i]);
    		printf("%.3f
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    做代码的曲线问题
    全书目录
    关于《Delphi源代码分析》的讨论
    说说“从编程到工程”专栏的由来
    CF285E Positions in Permutations
    CF264B Good Sequences
    CF115E Linear Kingdom Races
    CF633F The Chocolate Spree
    CF767C Garland
    CF559C Gerald and Giant Ches
  • 原文地址:https://www.cnblogs.com/MashiroSky/p/5928156.html
Copyright © 2011-2022 走看看