POJ 1018 Communication System 贪心+枚举
看题传送门: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 贪心+枚举的更多相关文章
- poj 1018 Communication System 枚举 VS 贪心
Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21631 Accepted: ...
- POJ 1018 Communication System(贪心)
Description We have received an order from Pizoor Communications Inc. for a special communication sy ...
- poj 1018 Communication System (枚举)
Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22380 Accepted: ...
- POJ 1018 Communication System(树形DP)
Description We have received an order from Pizoor Communications Inc. for a special communication sy ...
- poj 1018 Communication System
点击打开链接 Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21007 Acc ...
- POJ 1018 Communication System (动态规划)
We have received an order from Pizoor Communications Inc. for a special communication system. The sy ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
- poj 1018 Communication System_贪心
题意:给你n个厂,每个厂有m个产品,产品有B(带宽),P(价格),现在要你求最大的 B/P 明显是枚举,当P大于一定值,B/P为零,可以用这个剪枝 #include <iostream> ...
- POJ 1018 Communication System 题解
本题一看似乎是递归回溯剪枝的方法.我一提交,结果超时. 然后又好像是使用DP,还可能我剪枝不够. 想了非常久,无奈忍不住偷看了下提示.发现方法真多.有贪心,DP,有高级剪枝的.还有三分法的.八仙过海各 ...
随机推荐
- h5播放音乐
h5音频播放,里面參数能够查看http://www.w3school.com.cn/html5/html_5_audio.asp <audio controls="controls&q ...
- jq---方法总结
1. 什么是jQuery 在使用jQuery之前,我们必须先了解什么是jQuery,它能够干什么(不然我们为啥要用它). jQuery是一个非常流行的快速.小巧.功能强大的开源JavaScript库. ...
- POJ 3168 排序+扫描
题意: 思路: 我们可以把每个矩形拆成四条线 与x轴平行的放在一起 与y轴平行的放在一起 排个序 判一判有没有交 有交 则说明不可扩张 统计一下 就可以了 处理的姿势很重要 姿势不对毁一生 //By ...
- 湖南省第八届大学生计算机程序设计竞赛(A,B,C,E,F,I,J)
A 三家人 Description 有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园.A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕.C 太太因为正身怀六甲无法加入她们的行列, ...
- Ansible学习记录一:Linux下部署
0.Ansible介绍 Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用.配置.编排 task(持续交付.无宕机更新等),采用 paramiko 协议库(fabric 也使用这个 ...
- 【Uva 10641】 Barisal Stadium
[Link]: [Description] 输入一个凸n(3≤n≤30)边形体育馆和多边形外的m(1≤m≤1000)个点光源,每个点光 源都有一个费用值.选择一组点光源,照亮整个多边形,使得费用值总和 ...
- HDU 1166 敌兵布阵 Segment Tree题解
本题是最主要的分段树操作了.或者一般叫线段树,只是好像和线段没什么关系,仅仅是分段了. 不使用lazy标志,更新仅仅是更新单点. 假设不使用分段树,那么更新时间效率仅仅须要O(1),使用分段树更新效率 ...
- go timer
go timer package main import ( "fmt" "time" ) func debounce(interval time.Durati ...
- iTOP-4412 nfs文件系统启动
kernel command line type: 普通文件系统(本地)启动:root=/dev/mmcblk0p2 rootfstype=ext4 init=/linuxrc console=tty ...
- 【Codeforces Round #451 (Div. 2) C】Phone Numbers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用map<string,vector > dic;模拟就好. 后缀.翻转一下就变成前缀了. 两重循环剔除这种情况不输出就 ...