看题传送门:http://poj.org/problem?id=1018

题目大意:

某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths 和 价格prices。

现在每种设备都各需要1个,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。

其中B为这n件设备的带宽的最小值,P为这n件设备的总价。

思路:

贪心+枚举

要使得B/P最大,则B应该尽量大,而P尽量小。

可以按照价格从小到大排序。对于每一件产品,枚举出所有符合其他的bandwiths > 这一件的带宽。

因为把价格进行排序,价格小的在前面,所以可以肯定的是对于每件产品的第一次枚举,就是该次枚举的最优解。

比较每一次的最优解即可。

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct produce
{
int b;
int p;
bool operator<(const produce &pro)const
{
//如果价格一样就把b大的放前面
if(p==pro.p)
return b>pro.b;
return p<pro.p;
}
}; struct prodece_info
{
produce data[101];
int len;
}ps[101]; int n; double max(double a,double b)
{
return a<b? b:a;
} int main()
{
int t;
scanf("%d",&t); while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&ps[i].len);
for(int j=0;j<ps[i].len;j++)
scanf("%d%d",&ps[i].data[j].b,&ps[i].data[j].p);
//按照价格排序
sort(ps[i].data,ps[i].data+ps[i].len);
} //遍历开始
double ans=-99999;
double total_price, bandwidth; for(int i=0;i<n;i++)
{
for(int j=0;j<ps[i].len;j++)
{
//取其中一个b作为最小的
//之后应该选bandwidth不小于的且price尽量低的
bandwidth=ps[i].data[j].b;
total_price=ps[i].data[j].p;
bool ok=true;
for(int k=0;k<n;k++)
{
if(k==i)
continue;
else
{
int x=0;
//注意x合法性判断。都不满足的话。。。。。一开始没注意WA一次
while(bandwidth > ps[k].data[x].b && x<ps[k].len )
{
x++;
}
if(x==ps[k].len)
{
ok=false;
break;
}
total_price+=ps[k].data[x].p;
}
} if(ok)
ans=max(ans,bandwidth/total_price);
}
}
printf("%.3lf\n",ans);
}
}

POJ 1018 Communication System 贪心+枚举的更多相关文章

  1. poj 1018 Communication System 枚举 VS 贪心

    Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21631   Accepted:  ...

  2. POJ 1018 Communication System(贪心)

    Description We have received an order from Pizoor Communications Inc. for a special communication sy ...

  3. poj 1018 Communication System (枚举)

    Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22380   Accepted:  ...

  4. POJ 1018 Communication System(树形DP)

    Description We have received an order from Pizoor Communications Inc. for a special communication sy ...

  5. poj 1018 Communication System

    点击打开链接 Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21007   Acc ...

  6. POJ 1018 Communication System (动态规划)

    We have received an order from Pizoor Communications Inc. for a special communication system. The sy ...

  7. POJ 1018 Communication System(DP)

    http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...

  8. poj 1018 Communication System_贪心

    题意:给你n个厂,每个厂有m个产品,产品有B(带宽),P(价格),现在要你求最大的 B/P 明显是枚举,当P大于一定值,B/P为零,可以用这个剪枝 #include <iostream> ...

  9. POJ 1018 Communication System 题解

    本题一看似乎是递归回溯剪枝的方法.我一提交,结果超时. 然后又好像是使用DP,还可能我剪枝不够. 想了非常久,无奈忍不住偷看了下提示.发现方法真多.有贪心,DP,有高级剪枝的.还有三分法的.八仙过海各 ...

随机推荐

  1. js--09定时器

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. MATLAB 最优化计算 (一)

    1,令多行命 —— 逗号 VS 分号 2,管理工作空间 —— who , whos , clear , save , load , length (向量显示其长度,矩阵显示行数与列数中的较大数)  s ...

  3. tcp为什么要三次握手

    作者:大闲人柴毛毛链接:https://www.zhihu.com/question/24853633/answer/254224088来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  4. 004 python 流程控制语句

    流程控制语句 1.if判断 语法 a = 10,b = 20# 1if a == 10:  print('a等于10')# 2if a > b:  print('a大于b')else:  pri ...

  5. 【2017 Multi-University Training Contest - Team 3】RXD and math

    [Link]: [Description] [Solution] 发现1010mod(109+7)=999999937; 猜测答案是nk 写个快速幂; 注意对底数先取模; [NumberOf WA] ...

  6. XML学习总结(1)——XML入门

    一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(processing instruction ...

  7. Linux "零拷贝" sendfile函数中文说明及实际操作分析

    Sendfile函数说明 #include ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); sendfile ...

  8. CODEVS——T 3013 单词背诵

    http://codevs.cn/problem/3013/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  9. 洛谷 P3385 【模板】负环

    P3385 [模板]负环 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M ...

  10. home.pl 正在促销,一些域名免费(终止于2017.4.4)

    home.pl 正在促销,一些域名免费(终止于2017.4.4) home.pl 成立于1997年,是波兰顶尖的互联网服务公司.专注于域名登记,托管网站,保持电子邮件帐户等.  home.pl 正在促 ...