//我是莱鸟,多多交流

//380k

//94ms

题目的意思是:每种装备可由多个生产商提供,从每一种装备中选择一个厂家的设备,使得所选的总的各种装备中的最小带宽B与他们的价格之和P的比值B/P达到最大。

解题思路:

准备工作:在输入时,统计所有装备中的最小值min,和每种装备中的最大值max,然后从最大值中选出最小的一个Max。

然后:从最小值min到Max之间枚举所有的可能的结果,并输出最大的一个值

1、对每种装备进行按p的大小进行升序快排。以便之后的查找工作。

2、保存min到Max之间的所有的的B的节点及他们所在行列数,便于之后查询。

3、对min到Max之间的B[i]进行枚举,并进行更新。

4、输出最大的值。

#include <stdlib.h>
#include <stdio.h>
typedef struct Node
{
int bb;
int p;
}Node;
typedef struct BID
{
int bb;//带宽值
int row;//所在的行号
int col;
}BID;
Node node[101][101];//保存节点
BID B[10001];//保存需要枚举的带宽B值
int comp(const void *a,const void *b)
{
BID* x=(BID*)a;
BID* y=(BID*)b;
if(x->bb==y->bb)
{
if(x->row==y->row)
return x->col-y->col;
return x->row-y->row;
}
return x->bb-y->bb;
}
int cmp(const void *a,const void *b)
{
return ((Node*)a)->p-((Node*)b)->p;
}
int main()
{
void search(int num,int index[]);
int max[101];//保存每组的P最大值
int index[101];//保存每行厂家的个数
int n,num;
int i,j,k;
scanf("%d",&n);
while(n-->0)//
{
int min=65535;//保存最小的P值
int count=0;
for(i=0;i<10001;i++)
B[i].bb=0;
scanf("%d",&num);//设备种数
for(i=0;i<num;i++)//输入一组测试数据
{
scanf("%d",&index[i]);
for(j=0;j<index[i];j++)//输入一行数据
{
scanf("%d %d",&node[i][j].bb,&node[i][j].p);
if(node[i][j].bb>max[i])
max[i]=node[i][j].bb;
if(node[i][j].bb<min)
min=node[i][j].bb;
}
}
int Max=65535;//保存最大中的最小P值
for(k=0;k<num;k++)
if(max[k]<Max)
Max=max[k];
for(i=0;i<num;i++) //对各种厂家的设备按P从大到小的顺序升序排序
qsort(node[i],index[i],sizeof(Node),cmp);
for(i=0;i<num;i++)
for(j=0;j<index[i];j++)
if(node[i][j].bb>=min&&node[i][j].bb<=Max)
{
B[count].bb=node[i][j].bb;
B[count].row=i;
B[count++].col=j;
}
qsort(B,count,sizeof(BID),comp); //对B中的值按b为第一关键字,row为第二,cow为第三关键字升序排序
search(num,index);
}
return 1;
}
void search(int num,int index[101])//按B[]中的顺序进行枚举,并不断更新
{
int k=0;
int i,j;
double result=0;
while(B[k].bb)
{
double sum=0;
if(k&&B[k].bb==B[k-1].bb&&B[k].row==B[k-1].row)
{
k++;
continue;
}
int flag=0;
for(i=0;i<num;i++)
{
if(i!=B[k].row)
{
for(j=0;j<index[i];j++)
if(node[i][j].bb>=B[k].bb)//保证每种装备都有一件,否则不更新
{
sum=sum+node[i][j].p;
flag=1;
break;
}
if(flag)
flag=0;
else
break;
}
}
if(i==num)
{
double average;
average=B[k].bb/(sum+node[B[k].row][B[k].col].p);//
if(average>result)
result=average;
}
k++;
}
printf("%.3lf\n",result);
}

转载于:https://www.cnblogs.com/ltfbk/archive/2012/07/05/2578535.html

北大poj1018题解题报告相关推荐

  1. 网络流20+4题解题报告(已更前20题)

    链接:网络流20+4题解题报告 代码预览:Github 转载于:https://www.cnblogs.com/water-mi/p/10538858.html

  2. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

  3. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  4. 【LeetCode】163.Missing Ranges(Medium)(带锁题)解题报告

    [LeetCode]163.Missing Ranges(Medium)(带锁题)解题报告 题目地址:https://leetcode.com/problems/missing-ranges/(带锁题 ...

  5. 攻防世界XCTF-MISC入门12题解题报告

    MISC属于CTF中的脑洞题,简直就是信息安全界的脑筋急转弯.你说它渣,它也有亮点,不好评说.这块最亮眼的入门题就属隐写术,出题人骚的狠.但是我感觉未来其中一个重点,就是大数据安全,从海量流量中捕获恶 ...

  6. LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告

    LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...

  7. 攻防世界XCTF-WEB入门12题解题报告

    WEB入门题比较适合信息安全专业大一学生,难度低上手快,套路基本都一样 需要掌握: 基本的PHP.Python.JS语法 基本的代理BurpSuite使用 基本的HTTP请求交互过程 基本的安全知识( ...

  8. 攻防世界XCTF-MOBILE入门9题解题报告

    说实话,这几天被逆向的恐怖思维,深深的吓着了,真的要抱腿腿了,叫我失眠了好几晚,我觉得逆向分析是CTF中最难的,求腿腿指点迷津啊,我决定不闷头自己研究了.@欠费烦 感谢大佬提供的帮助,让我有了继续刷下 ...

  9. 2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案

    148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序.其中,堆排序利用了数 ...

最新文章

  1. 如何解读和在线绘制进化树?
  2. python中strip函数_让你整明白python strip函数妙用
  3. 【工作相关】公子龙:工作后我变强了,暂时没秃
  4. SecureCRT 连接虚拟机Linux
  5. PHP-FPM.CONF配置:日志文件、端口设置、动态静态选择设置
  6. [洛谷P2124] 奶牛美容
  7. mac 配置/etc/profile重启后不生效
  8. 计算机的只读储存器,只读存储器
  9. 单片机C语言稳压程序,51单片机的基于MC34063的5V稳压器的设计 -(原理图+程序)...
  10. java-OOP-抽象类和接口
  11. vivox6Android版本,vivo x6有几个版本?vivo x6各版本区别对比评测
  12. 怎样使计算机桌面有励志壁纸,适合电脑的高清励志桌面壁纸
  13. 黑苹果驱动 hackintosh
  14. Python学习笔记——给图片格式转换器做个GUI
  15. 仓储系统主要注意事项
  16. 遍历同辈节电的方法_家庭节水节电的24个好方法
  17. 运动耳机怎么选,盘点目前适合运动的几款耳机
  18. 如何用织梦仿制php网站首页,DEDE织梦网站首页(排名)仿制实战操作
  19. javascript 时间倒计时
  20. 802.11 帧封装细节

热门文章

  1. openresty获取nginx请求url中的所有参数
  2. linux如何删除符号链接文件夹,在Linux中怎样移除(删除)符号链接
  3. Java的native关键字
  4. 《通过Web远程浏览并控制Tiny6410上的usb摄像头》---实战篇
  5. 如何画功能稳定,美观的PCB?
  6. Javaweb基础——Servlet
  7. java重载与重写的区别你懂了吗
  8. eclipse为什么导入不了awt_为什么选择javafx?
  9. IO-4(BufferedInputStream、BufferedInputStream、BufferedReader、BufferedWriter)
  10. ios 后台唤醒应用_IOS开发之----详解在IOS后台执行