题意:

  给出n个工厂的产品参数带宽b和价格p,在这n个工厂里分别选1件产品共n件,使B/P最小,其中B表示n件产品中最小的b值,P表示n件产品p值的和。

  输入 iCase n

    表示iCase个样例n个工厂
    m1 p1 b1 p2 b2..pm1 bm1 //第一个工厂有m1个同种类不同参数的产品,每一个产品的参数分别是p1 b1 p2 b2
    m2 p1 b1 p2 b2..pm2 bm2
    ...
    mn p1 b1 p2 b2..pmn bmn

    

思路:

  排序,先把b从小到大排序,然后把p从小到大排序,最后让第几个工厂的序号从小到大排序

  排完后就可以直接枚举了,枚举bi,固定了bi之后就枚举pj,取每一个工厂里满足bj比bi大的就加起来,然后计算哪一个值最大..

Tip:

其中有一些优化就是剪枝:

    ①. 因为最后肯定要有n个bj比bi大,所以bi枚举到sum-(n-1)就可以了,sum表示总共有多少个产品..

    ②. 如果枚举到bi比某一个公司的所有产品的b都大的时候,就不用往后枚举了,因为产品是按b排过序的,题目要求n-1个公司里面选取的b都要比当前bi大,既然当前bi比某一个公司的所有b都大了,则该公司无法选取符合条件的产品,而后面产品b都比bi大,就跟不可能选取到符合条件的产品了,所以就可以直接break;

    ③. 如果枚举到某一个bi的时候,bj比bi大的公司个数不满n个的话bi后面的b也可以不枚举了,原因同上..

  

Code:

 #include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = ; struct Div
{
int id;
int p;
int b;
}_div[MAXN*MAXN];
int maxB[MAXN]; int cmp(Div a, Div b)
{
if (a.b != b.b) return a.b < b.b;
else if (a.p != b.p) return a.p < b.p;
else return a.id < b.id;
} int main()
{
// freopen("in.txt", "r", stdin);
int iCase, n, m, sum;
//int vis;
bool vis[MAXN];
double ans;
bool flag;
scanf("%d", &iCase);
while (iCase--) {
sum = ans = ;
memset(maxB, , sizeof(maxB));
flag = true; scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d", &m);
while (m--) {
scanf("%d %d", &_div[sum].b, &_div[sum].p);
maxB[i] = max(maxB[i], _div[sum].b);
_div[sum++].id = i;
}
} sort(_div, _div+sum, cmp); for (int i = ; i < sum-(n-); ++i) {
int P = _div[i].p;
int count = ;
// vis = (1<<n)-1;
// vis ^= (1<<_div[i].id);
memset(vis, false, sizeof(vis));
vis[_div[i].id] = true;
for (int j = i+; j < sum; ++j)
// if (vis & (1<<_div[j].id)) {
if (!vis[_div[j].id]) {
if (maxB[_div[j].id] < _div[i].b) {
flag = false;
break;
}
P += _div[j].p;
//vis ^= (1<<_div[j].id);
vis[_div[j].id] = true;
count++;
}
if (count < n || !flag) break;
ans = max(ans, (double)_div[i].b/P);
}
printf("%.3lf\n", ans);
}
return ;
}

链接:http://poj.org/problem?id=1018

POJ 1018 【枚举+剪枝】.cpp的更多相关文章

  1. poj 1018(枚举+贪心)

                                                                              通讯系统 We have received an o ...

  2. POJ 1018 Communication System(树形DP)

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

  3. POJ 1018 Communication System 贪心+枚举

    看题传送门:http://poj.org/problem?id=1018 题目大意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m个厂家提供生产,而每个厂家生产的同种设备都 ...

  4. POJ 2531 Network Saboteur (枚举+剪枝)

    题意:给你一个图,图中点之间会有边权,现在问题是把图分成两部分,使得两部分之间边权之和最大. 目前我所知道的有四种做法: 方法一:状态压缩 #include <iostream> #inc ...

  5. poj 1018 Communication System 枚举 VS 贪心

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

  6. 【poj 3080】Blue Jeans(字符串--KMP+暴力枚举+剪枝)

    题意:求n个串的字典序最小的最长公共子串. 解法:枚举第一个串的子串,与剩下的n-1个串KMP匹配,判断是否有这样的公共子串.从大长度开始枚举,找到了就break挺快的.而且KMP的作用就是匹配子串, ...

  7. POJ 1054 The Troublesome Frog(枚举+剪枝)

    题目链接 题意 :给你r*c的一块稻田,每个点都种有水稻,青蛙们晚上会从水稻地里穿过并踩倒,确保青蛙的每次跳跃的长度相同,且路线是直线,给出n个青蛙的脚印点问存在大于等于3的最大青蛙走的连续的脚印个数 ...

  8. poj 1018 Communication System (枚举)

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

  9. 【贪心】Communication System POJ 1018

    题目链接:http://poj.org/problem?id=1018 题目大意:有n种通讯设备,每种有mi个制造商,bi.pi分别是带宽和价格.在每种设备中选一个制造商让最小带宽B与总价格P的比值B ...

随机推荐

  1. Logistic Regression(逻辑回归)(一)基本原理

    (整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 虽然叫做“回归”,但是这个算法是用来解决分类问题的.回归与分类的区 ...

  2. 如何将自定义标签封装成一个Jar包

    当我们在一个web应用中开发好一些自定义标签的时候,这些自定义标签通常有标签处理器Java类,和一个描述这些标签tld文件,如果我们想在以后别的web工程中还能用上这些标签,可以将这些自定义标签封装在 ...

  3. Html.Partial("")与Html.RenderPartial("")区别

    文章有点长,但大多是代码,看看很快的,不要压力太大.网上有很多关于这两个方法的区别,都说出了它本质的区别(不看代码,只看这个结论,就已经足够了,如果觉得有必要从代码中得出这个结论,那就继续往下看),这 ...

  4. redhat6.3 jfreechar中文乱码解决途径

    最近使用到jfreechar的项目,在转移到linux上面时出现中文乱码(中文被显示为框框),网上查了一些资料,结合自身系统的特性,总结了一种安装字体的方式.在说字体安装之前首先上个测试的代码吧:we ...

  5. hdu 4090 GemAnd Prince

    题目大意: 别人说是消消看,至于你玩没玩过.反正我是没玩过的. 就是选择一个钻石,可以消除与它相连的所有钻石.并获得 消除数量*消除数量  的分 思路: 直接暴搜,然后用一个cnt数组表示每一种钻石剩 ...

  6. 积累的VC编程小技巧之标题栏和菜单

    1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ...

  7. SpringMVC批量上传

    @RequestMapping(value = "/upload") public String handleFormUpload(MultipartHttpServletRequ ...

  8. [51daifan]来吧,一起书写51daifan的成长史吧-让一部分人先安全起来

    对新创项目而言,是idea更重要,还是执行力更重要?在没有用户时,我们该如何冷启动?团队.人.技术.产品.推广和拜春哥,哪一个更重要?到底是什么决定了一个项目的生存或者毁灭? 来吧,一起书写51dai ...

  9. POJ 1862 &amp; ZOJ 1543 Stripies(贪心 | 优先队列)

    题目链接: PKU:http://poj.org/problem?id=1862 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  10. 14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate

    14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate 主的master thread ...