POJnbsp;nbsp;1018nbsp;nbsp;Communicationnbsp;System

2023-10-20 03:58

本文主要是介绍POJnbsp;nbsp;1018nbsp;nbsp;Communicationnbsp;System,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Poj_1018_Communication System

关键词:dp 贪心 枚举

题目描述:Communication System

Time Limit: 1000MS

 

Memory Limit: 10000K

Total Submissions: 8824

 

Accepted: 3095

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 t10), 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 (1n100), the number of devices in the communication system, followed by n lines in the following format: the i-th line (1in) starts with mi (1mi100), 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

这题还不会写,但是还是先贴上大牛(大牛貌似语文不是太好,错别字就让我改了半天POJ <wbr> <wbr>1018 <wbr> <wbr>Communication <wbr>System)的吧,省的以后找不到了

题目分析:本题一看一位很水,没想到还有这么多细节啊!吸取教训。仔细一看想用dp,找不到什么子结构,贪心感觉有不太对。最后感觉有点像二分的枚举。题目意思大概就是有ndevices,每个都需要一个bandwidth,而这个会有很多商家提供,价格不同,现在在n个中,每个选一个,但是着n个中选B最小的,而所有选的price和最小,即是B/p最大。

算法:就是找到所有组中最小的且是所有组中最小的B,和每组中最大的B且是所有组中最小的,然后从最小到最大枚举,每次选取大于Bp最小的,然后比较求出最大的B/P

思考:水题不水!每一个题都应该认真对待。总结-做题-再总结。

代码:

#include<stdio.h>

#include<string.h>

 

int main()

{

       int i,j,k,m,min,max,high,low,t,sum;

       int b[101][101],p[101][101],num[101],flag[32767];

       double b_p,mmax;

       scanf("%d",&t);

       while(t--)

       {

              memset(flag,0,sizeof(flag));

              high=32767;

              low=32767;

              scanf("%d",&m);

              for(i=0;i<m;i++)

              {

                     min=32767;

                     max=0;

                     scanf("%d",&num[i]);

                     for(j=0;j<num[i];j++)

                     {

                            scanf("%d",&b[i][j]);

                            scanf("%d",&p[i][j]);

                            flag[b[i][j]]=1;

                            if(max<b[i][j])

                                   max=b[i][j];

                            if(min>b[i][j])

                                   min=b[i][j];

                     }

                     if(low>min)

                            low=min;

                     if(high>max)

                            high=max;

              }

              mmax=0;

              for(i=low;i<=high;i++)

              {

                     if(flag[i])

                     {

                            sum=0;

                            for(j=0;j<m;j++)

                            {

                                   min=32767;

                                   for(k=0;k<num[j];k++)

                                   {

                                          if(b[j][k]>=i)

                                          {

                                                 if(min>=p[j][k])

                                                        min=p[j][k];

                                          }

                                   }

                                   sum+=min;

                            }

                           

                            b_p=(double)i/(double)sum;

                            if(mmax<b_p)

                                   mmax=b_p;

                     }

              }

              printf("%.3lf\n",mmax);

       }

       return 0;

}

这篇关于POJnbsp;nbsp;1018nbsp;nbsp;Communicationnbsp;System的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244487

相关文章

Partical System

创建"粒子系统物体"(点击菜单GameObject -> Create Other -> Particle System) 添加"粒子系统组件"(点击Component -> Effects  ->Particle System) 粒子系统检视面板  点击粒子系统检视面板的右上角的"+"来增加新的模块。(Show All Modules:显示全部) 初始化模块: •

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

System.getProperties().

Java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

android6/7 system打包脚本

1.android5打包system就是网站上常见的制作ROM必备的解包打包system脚本 指令如下:mkuserimg.sh -s out/target/product/$TARGET_PRODUCT/system out/target/product/$TARGET_PRODUCT/obj/PACKAGING/systemimage_intermediates/system.img

android打包解包boot.img,system.img

原帖地址:http://www.52pojie.cn/thread-488025-1-1.html 转载Mark一下,日后研究 最近工作需要对boot.img,system.img进行破解。顺便将心得分享一下。 我的工作环境是在linux下的。所以工具都是针对linux的。 boot.img破解相关工具: 1、split_boot    perl脚本 2、boot_i

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二

Linux函数fcntl/system学习

本文针对项目中用到的几个函数进行详细分析,并尽可能的添加示例进行验证学习。比如fcntl/ioctl函数、system/exec函数、popen/pclose函数、mmap函数等。 重点参考了《UNP》和《Linux程序设计》第四版。 一、fcntl函数 fcntl函数可以改变或者查看已打开文件的性质。该函数的定义如下: #include <fcntl.h> int fcntl(

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i

解决PHP Warning: strftime(): It is not safe to rely on the system's timezone set

当运行一些程序时,在httpd日志中会有如下警告日志: PHP Warning:  strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set(