POJ1018贪心(多路归并的想法)
题意:
有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贪心(多路归并的想法)的更多相关文章
- uva 11997 K Smallest Sums 优先队列处理多路归并问题
题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的. 思路:优先队列处理多路归并,每个状态含有K个元素.详见刘汝佳算法指南. #include<iostream> #i ...
- UVA 11997 K Smallest Sums (多路归并)
从包含k个整数的k个数组中各选一个求和,在所有的和中选最小的k个值. 思路是多路归并,对于两个长度为k的有序表按一定顺序选两个数字组成和,(B表已经有序)会形成n个有序表 A1+B1<=A1+B ...
- bzoj4165 矩阵 堆维护多路归并
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4165 题解 大概多路归并是最很重要的知识点了吧,近几年考察也挺多的(虽然都是作为签到题的). ...
- LA3135简单多路归并(优先队列)
题意: 有N个任务,每个任务都有自己的时间间隔(就是每t秒请求执行一次)和任务id,这n个任务公用一个cpu,每次我们都执行时间靠前的,如果相同时间内有多个任务,就执行任务id小的,要求模 ...
- UVA11997求前k个和,多路归并问题
题意: 给你一个二维矩阵,n*n的,每次从每一行中拿出来一个,然后加起来组成一个和,一共可以得到n^n个和,要求求出这n^n个和中最小的那n个和. 思路: 多路归并问题,先说下多路 ...
- 2021.11.04 P1392 取数(多路归并)
2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...
- 2021.07.02 UVa1197 多路归并模板
2021.07.02 UVa1197 多路归并模板 UVA11997 K Smallest Sums - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 分析: 题解 UVA11997 ...
- D - K Smallest Sums(多路归并+贪心)
Problem K K Smallest Sums You're given k arrays, each array has k integers. There are kk ways to pic ...
- 外排序 & 败者树 & 多路归并-学习
来来来,根据这篇文章,学一下败者树吧: http://blog.csdn.net/whz_zb/article/details/7425152 一.胜者树 胜者树的一个优点是,如果一个选手的值改变了, ...
随机推荐
- 解决:layUI数据表格+简单查询
解决:layUI数据表格+简单查询 最近在用layui写项目,在做到用户查询时,发现在layui框架里只有数据表格,不能增加查询.于是自己摸索了一下,写个笔记记录一下. 我想要的效果: 1.定义查询栏 ...
- Debian中的NVIDIA显卡驱动安装——超简单,一行命令
其实Debian的non-free固件中包含NVIDIA的显卡驱动,所以没必要在官网下run包一步一步来 sudo apt install nvidia-settings 安装时会提示与X冲突,没关系 ...
- Celery:进一步探索
一.创建Celery专用模块 对于大型项目,一般需要创建一个专用模块,便于管理. 1.1 模块结构 proj/__init__.py /celery.py /tasks.py proj/celery. ...
- 24端口以太网FPGA的开发板
板卡架构 板载FPGA(K7-325T)处理24端口10/100/1000M以太网数据: FPGA外挂4Gbit的DDR3颗粒,最大支持800MHz: 板载CPU进行系统配置.管理,并与客户端软件通信 ...
- BeanShell 用法汇总
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...
- (四)SpringBoot启动过程的分析-预处理ApplicationContext
-- 以下内容均基于2.1.8.RELEASE版本 紧接着上一篇(三)SpringBoot启动过程的分析-创建应用程序上下文,本文将分析上下文创建完毕之后的下一步操作:预处理上下文容器. 预处理上下文 ...
- frp穿透内网使用vsftpd服务
本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...
- Android 之 ToolBar 踩坑笔记
写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...
- 洛谷P1290欧几里德游戏
题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...
- 给我一个shell我能干翻你内网
0x00 前言 在去年小菜鸡学了点内网知识就闲着没事跑点jboss的站看看,在经历过很多次内网横向失败之后终于算是人生圆满了一把,阿三的站一般进去之后很难横向,不知道是不是我太菜的原因,反正阿三的站能 ...