2017ecjtu-summer training #11 POJ 1018
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 29218 | Accepted: 10408 |
Description
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
Output
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 题意 气得死,该死的英语。t组测试,每次输入一个n(要买的设备总数),接下来n行每行第一个数为生产i(1<=i<=n)设备的厂家数mi,紧接着是每个厂家生产该设备的bandwidth, price;
B为所选的n个设备中bandwidth的最小值,P为所选的n个设备price的和,问你怎样才能使B/P最大,输出B/P保留三位小数。
解析 该题有很多解法,我选择了贪心,比较好想;
B的取值范围,最小值每个设备所有生产商bandwidth的最小值,最大值每个设备所有生产商bandwidth最大值的最小值(样例中就是 80<=B<=120)
枚举区间中的bandwidth,每次在每个设备所有生产商中找bandwidth>=B且price最小的,把price累加起来,最后计算出B/P与上一次枚举的结果进行比较,留下较大的那个。 AC代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <queue>
#include <vector>
#include <algorithm>
#define maxn 105
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
struct node
{
double b;
double p;
};
node f[maxn][maxn];
int main(int argc, char const *argv[])
{
int t,n;
int a[maxn];
double bz[maxn*maxn];
double b[maxn];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(bz,,sizeof(bz));
int cnt1=,cnt2=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
double maxb=;
for(int j=;j<=a[i];j++)
{
scanf("%lf %lf",&f[i][j].b,&f[i][j].p);
bz[cnt1++]=f[i][j].b; //把所有的b放到一个数组,之后再排序,方便枚举
maxb=max(maxb,f[i][j].b); //找出每个设备的b的最大值
}
b[cnt2++]=maxb; //存进数组排序,b[0]就是所有设备的b的最大值的最小值
}
sort(bz,bz+cnt1);
sort(b,b+cnt2);
double maxbp=;
for(int i=;bz[i]<=b[];i++) //枚举
{
double sump=;
for(int j=;j<=n;j++) //第j个设备
{
double minp=inf;
for(int k=;k<=a[j];k++) //第j个设备的第k个生产商
{
if(f[j][k].p<minp&&f[j][k].b>=bz[i]) //找出最符合条件的p值
{
minp=f[j][k].p;
}
}
sump+=minp;
}
double ans=bz[i]/sump;
if(ans>maxbp)
maxbp=ans; //每次比较,留下较大的
}
printf("%.3lf\n",maxbp);
}
return ;
}
我比较菜,程序跑的慢,700+ms,QWQ
2017ecjtu-summer training #11 POJ 1018的更多相关文章
- 2017ecjtu-summer training # 11 POJ 2492
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 38280 Accepted: 12452 D ...
- POJ 1018 Communication System(树形DP)
Description We have received an order from Pizoor Communications Inc. for a special communication sy ...
- POJ 1018 【枚举+剪枝】.cpp
题意: 给出n个工厂的产品参数带宽b和价格p,在这n个工厂里分别选1件产品共n件,使B/P最小,其中B表示n件产品中最小的b值,P表示n件产品p值的和. 输入 iCase n 表示iCase个样例n个 ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
- POJ 1018 Communication System 贪心+枚举
看题传送门:http://poj.org/problem?id=1018 题目大意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m个厂家提供生产,而每个厂家生产的同种设备都 ...
- 【贪心】Communication System POJ 1018
题目链接:http://poj.org/problem?id=1018 题目大意:有n种通讯设备,每种有mi个制造商,bi.pi分别是带宽和价格.在每种设备中选一个制造商让最小带宽B与总价格P的比值B ...
- poj 1018 Communication System
点击打开链接 Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21007 Acc ...
- 2017ecjtu-summer training #7 POJ 2689
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18731 Accepted: 5006 D ...
- poj 1018 Communication System_贪心
题意:给你n个厂,每个厂有m个产品,产品有B(带宽),P(价格),现在要你求最大的 B/P 明显是枚举,当P大于一定值,B/P为零,可以用这个剪枝 #include <iostream> ...
随机推荐
- iOS js oc相互调用JavaScriptCore(一)
原址:http://blog.csdn.net/lwjok2007/article/details/47058101 1.普通调用 从iOS7开始 苹果公布了JavaScriptCore.framew ...
- 【Zookeeper】源码分析之服务器(三)之LeaderZooKeeperServer
一.前言 前面分析了ZooKeeperServer源码,由于QuorumZooKeeperServer的源码相对简单,于是直接分析LeaderZooKeeperServer. 二.LeaderZooK ...
- xamarin android listview的用法
listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...
- ArcGIS 网络分析[2.4] OD成本矩阵
什么是OD成本矩阵? 先不说这个东西是什么,我们还是举一个实际的例子: 现在存在3个城市北京.上海.武汉,请分析他们两两之间的通行时间. 很简单嘛!北京到上海,北京到武汉,上海到武汉都来一次最短路径分 ...
- MySQL 加锁处理分析-转载
来自何登成的技术博客 1.1 MVCC:Snapshot Read vs Current Read 2 1.2 Cluster Index:聚簇索引 3 1.3 ...
- lesson - 3 笔记 ls /alias /ldd /cd /pwd /环境变量 / 目录
一.ls 命令 作用:用来显示目录列表. 语法: ls (选项) (参数) 选项: -a: 显示所有档案以及目录(ls内定将档案或目录名称为“./..”的视为隐藏) -A: 显示除隐藏文件“./.. ...
- volatile作用及相关集合类
在工作一年多之后,java程序员都会了解到volatile 这个修饰符, 其在多线程环境下解决了long/double写操作的原子性.基本变量的可见性.通过建立内存屏障保证指令有序性 那么在哪些Jav ...
- Webpack 2 视频教程 018 - 使用可视化图表进行统计分析打包过程
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- solr 的 field, copyfield ,dynamic field
Field: Field就是一个字段,定义一个Field很简单: <field name="price" type="sfloat" indexed=&q ...
- Xamarin.Android 怎么定义一个按钮和返回键功能一样回到上一个界面
https://zhidao.baidu.com/question/570934367.html页面之间的跳转有startActivity 和startActivityForResult两种,star ...