题意:
     有n个服务器,每个服务器都要安装网线(必须也只能安装一个),然后每个服务器都有mi种选择网线的方式,每种方式两个参数,一个是速度b,另一个是价钱p,然后让你找到一个最大的比值 minb/sump,就是所有的选择中最小的那个速度,必上话的钱的总和。

思路: 
      这个题目按照讨论组里面的说法估计做法很多,不管了,说下我自己的做法吧,我的做法有点像操作系统里面那个多路归并(如果没记错是叫这个,做题的时候突然想到这个方式,试了下,还真行),具体是这样,枚举最小的b,也就是最小的那个带宽,对于每个服务器,我们可以先把他所有的可选择项都按照带宽从小到大排序,排序后再倒着预处理得到每个选项后面中最小的那个花费,全部这样处理完之后就得到了一个二维的表,然后我们开始枚举,每个表都是根据带宽从小到大排序的,这样所有中最小的那个肯定就是某一个的第一项,我们O(n)的时间找到第一项,以这一项的带宽为最小带宽,花费是当前这个选项的花费,其他的就选最小的花费,然后删除找到的这一项,就这样一直找到头一个服务器的选项全都用完了位置,还有就是删除项的时候可以开一个一维数组,记录当前这个服务器已经用到第几项了,删除第i个服务器的当前项,直接mk[i]++就行了,16msAC,总的时间复杂度最坏应该是 O(n*n*n) 1000000吧。感觉思路有点瞎扯了,呵呵,题目不难,瞎扯就瞎扯吧,好就说这些。

#include<stdio.h>
#include<string.h>
#include<algorithm>

#define N 100 + 10
#define INF 1000000000

using namespace std;

typedef struct
{
    int b ,p ,minp;
}NODE;

NODE node[N][N];
int now[N] ,num[N];

bool camp(NODE a ,NODE b)
{
    return a.b < b.b;
}

int main ()
{
    int t ,i ,j ,n ,tmp ,sn;
    scanf("%d" ,&t);
    while(t--)
    {
        scanf("%d" ,&n);
        for(i = 1 ,sn = 0 ;i <= n ;i ++)
        {
            scanf("%d" ,&num[i]);
            sn += num[i];
            for(j = 1 ;j <= num[i] ;j ++)
            scanf("%d %d" ,&node[i][j].b ,&node[i][j].p);
            sort(node[i] + 1 ,node[i] + num[i] + 1 ,camp);
            for(j = num[i] ;j >= 1 ;j --)
            {
                if(j == num[i] || tmp > node[i][j].p)
                tmp = node[i][j].p;
                node[i][j].minp = tmp;
            }
            now[i] = 1;
        }
        double Ans = 0;
        int nowb ,nowp;
        while(sn--)
        {
            nowb = INF;
            nowp = 0;
            int mkbreak = 0;
            for(i = 1 ;i <= n ;i ++)
            {
                if(now[i] > num[i]) mkbreak = 1;
                if(nowb > node[i][now[i]].b)
                nowb = node[i][now[i]].b;
            }
            if(mkbreak) break;
            int mk = 0;
            for(i = 1 ;i <= n ;i ++)
            {
                //if(now[i] > num[i]) continue;
                if(!mk && nowb == node[i][now[i]].b)
                {
                    mk = 1;
                    nowp += node[i][now[i]].p;
                    now[i] ++;
                }
                else nowp += node[i][now[i]].minp;
            }
            if(Ans < nowb * 1.0 / nowp)
            Ans = nowb * 1.0 / nowp;
        }
        printf("%.3lf\n" ,Ans);
    }
    return 0;
}

POJ1018贪心(多路归并的想法)相关推荐

  1. 多路归并排序_1600W整数排序多路归并

    Merge Sort 问题描述 Go 语言实现一个16M的整数(int64)多路归并的数组排序 思路 将待排序数组分成多个组,利用多个goroutine实现各个组的并行排序:然后通过Heap(最小堆) ...

  2. LA3135简单多路归并(优先队列)

    题意:       有N个任务,每个任务都有自己的时间间隔(就是每t秒请求执行一次)和任务id,这n个任务公用一个cpu,每次我们都执行时间靠前的,如果相同时间内有多个任务,就执行任务id小的,要求模 ...

  3. UVA11997求前k个和,多路归并问题

    题意:      给你一个二维矩阵,n*n的,每次从每一行中拿出来一个,然后加起来组成一个和,一共可以得到n^n个和,要求求出这n^n个和中最小的那n个和. 思路:      多路归并问题,先说下多路 ...

  4. 77. Leetcode 1439. 有序矩阵中的第 k 个最小数组和 (堆-技巧二-多路归并)

    技巧二 - 多路归并其实这个技巧,叫做多指针优化可能会更合适,只不过这个名字实在太过朴素且容易和双指 针什么的混淆,因此我给 ta 起了个别致的名字 - 多路归并.多路体现在:有多条候选路线.代码上, ...

  5. uva 11997 K Smallest Sums 优先队列处理多路归并问题

    题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的. 思路:优先队列处理多路归并,每个状态含有K个元素.详见刘汝佳算法指南. 1 #include<iostream> ...

  6. 算法 {多路归并,二路归并,第K大数}

    catalog 二路归并 归并操作--并集 暴力 二叉树 归并操作--元素复合 暴力 二叉树 堆维护 行分组 多路归并 归并操作--并集 归并操作--元素复合 例题 二路归并 多路归并 是 二路归并 ...

  7. 多路归并问题(多个有序表合为一个有序表)

    给定k个有序表(不妨假设均为升序),求这k个有序表中最小的n个元素,这类问题称为多路归并问题. 对于这类问题,考虑先取出每个有序表中的最小的元素,在取出的这些元素中的最小值即为所有元素的最小值,必然要 ...

  8. [HIT-DB-Lab3] 数据库的多路归并算法及其实现

    HIT战德臣老师的数据库lab3, 目的是用代码实现一个两阶段多路归并算法, 处理数据, 具体要求如下 目的 思路 先看看ppt上有关内容: 两趟多路归并算法其实不难理解, 如果你的内存足够大, 你可 ...

  9. 【外排序】外排序算法(磁盘排序、磁带排序) 外存设备结构分析 败者树多路归并 最佳归并树白话讲解

    外排序 外排序概述 外排序的基本方法是归并排序法 例子 总结 存储设备(可忽略) 磁带 磁带结构 磁盘 硬盘结构 块 硬盘上的数据定位 磁盘排序 磁盘排序过程 1.生成初始顺串 方法1(常规方法): ...

最新文章

  1. 每日一皮:客户被绑,蒙眼,惊问 “想干什么?”
  2. 印中合作国际农民丰收节贸易会-张志祥:谋定农业大健康
  3. 解决归档出错,ORA-00257: archiver error. Connect internal only, until freed.
  4. Mysql多表查询(两张独立表,一张关系表)
  5. Python知识点之Python面向对象
  6. 【Q】【POJ 2560】【POJ 2031】
  7. 宝塔pure-ftpd文件管理不显示目录|文件夹打不开
  8. 【开发工具IDE】eclipse的web项目的tomcat安装部署问题
  9. 河南省第九届ACM程序设计大赛总结
  10. Elasticsearch:IP 数据类型及其搜索
  11. Key was created with errors:报错
  12. ⚡写一个有发音的背单词软件⚡——四六级必过系列
  13. OH~My Godness ~!被点到了...
  14. ESP8266开发之旅 阿里云物联网平台篇④ LED智能灯控制系统(MQTTS客户端直连)
  15. 第六次实验报告第二部分
  16. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
  17. python 3d图表_matplotlib 三维图表绘制方法简介
  18. springboot入门-Eclipse
  19. 京东撸货轻松月入十万,做到这几点,你也可以!
  20. c++ sort函数排序---vector

热门文章

  1. PHP配置问题:AppServ安装discuz出错 Fatal error:
  2. phpFastCache
  3. 抽象:程序员必备的能力
  4. 路由器学习之静态路由实验
  5. Gartner:2015年SIEM(安全信息与事件管理)市场分析
  6. 文件下载类型__response
  7. Mongodb-初步了解
  8. Java代码-CPU占用过高排查思路
  9. 14种常见HTTP状态码
  10. C# 接口的作用浅谈举例(转)