poj2442优先队列
- 感谢
- http://hi.baidu.com/%C0%B6%C9%ABarch/blog/item/f9d343f49cd92e53d7887d73.html
- 的博主!
- 思路:
- 我们要找到n个smallest的数,用贪心法可以解决这一问题。
- (1)维护两个数组,a和b,以及一个大根堆p
- 循环不变式:
- (1)初始化
- 将元素读入a,将a排序(从小到大)
- 执行并重复(2)
- (2)保持
- 对于这全部数据第二行到第m行(从第二行开始,因为第一行读到a里了)
- 将元素读入b,将b排序(从小到大)
- For i = 0 to n -1
- heap.push(a[i]+b[0]);
- 然后
- for(int i = 1; i < n;i++)
- {
- for(int j = 0 ; j < n; j++)
- {
- if( (b[i] + a[j]) > heap.top() ) break;
- heap.pop(); ///从heap中删除一个最大的元素,从而保证heap中元素数目不变
- heap.push(b[i] + a[j]);
- }
- }
- /////这样,就选出了n个最小值
- 然后把heap中的n个值按照从小到大给
- a[1] -> a[n],并将heap清空。
- 执行(2)
- (3)最终结果
- 输出a中全部元素就可以了,注意,对于每个case都要换行哦!
#include <iostream>
#include <stdio.h>
#include <queue>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int a[],b[];
int n,m,i,j,t,y;
cin>>t;
while(t--)
{
scanf("%d%d",&m,&n);
for(i=;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
priority_queue <int> q;
for(i=;i<m;i++)
{
for(j=;j<n;j++)
scanf("%d",&b[j]);
sort(b,b+n,cmp);
for(j=;j<n;j++)
{
q.push(b[]+a[j]);
}
for(j=;j<n;j++)
{
for(y=;y<n;y++)
{
if(a[y]+b[j]>=q.top()) break;
q.pop();
q.push(a[y]+b[j]);
}
}
for(j=;j<n;j++)
{
a[n--j]=q.top();
q.pop();
}
}
for(i=;i<n;i++)
{
if(i==)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
cout << endl;
}
return ;
}
poj2442优先队列的更多相关文章
- Sequence(Poj2442)
Sequence(Poj2442) 题意: 有m个数列,每个数列n个值,每个序列中选取一个值可以组成n^m种不同的序列,求前n小的序列和. Input 12 31 2 32 2 3 Output 3 ...
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 数据结构:优先队列 基于list实现(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...
- python优先队列,队列和栈
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...
- 数据结构作业——Sanji(优先队列)
山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...
- Java优先队列
按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...
- 优先队列实现Huffman编码
首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点 ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
随机推荐
- Laravel5.1 数据库--DB运行原生SQL
Laravel操作数据库有三种:DB原生SQL.构建器.Model.这三种依情况而决定使用哪种更合适. 那么今儿咱就从DB原生SQL说起: 1 用DB门面原生SQL语句操作 用DB门面操作的话呢 无非 ...
- 将方法定义在prototype上的好处
通常js类定义和使用的是这样的: var Class=function(){}; Class.prototype.sharedFn=function(){}; var instanceA=new Cl ...
- JavaScript基础深入之
JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...
- 迷宫问题(java实现)
1. public class Direction { private int x; private int y; public Direction(int x, int y) { this.x = ...
- 巨蟒python全栈开发django4:url反向解析图解&&模板渲染2
注意:前端有aaa变量,后端没有aaa变量,存在p标签,但是显示不出来 有p标签,我们可以指定默认值,在没有其他内容的时候 过滤器有60多种,有点多,用到的时候再记和查 结果: 显示是acd 看长度 ...
- ThinkPHP的join方法
两张表: 表一:pre_company_member 关联字段:comp_id 表二:pre_company 关联字段:comp_id 查询这两表中的数据. 方法一:驼峰法 $member=M('C ...
- Django 进阶(分页器&中间件)
分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views h ...
- 我的Android进阶之旅------>Android中adb install 安装错误常见列表
adb的安装过程分为传输与安装两步. 在出错后,adb会报告错误信息,但是信息可能只是一个代号,需要自己定位分析出错的原因. 下面是从网上找到的几种常见的错误及解决方法: 1.INSTALL_FAIL ...
- 运行scrapy保存图片,报错ValueError: Missing scheme in request url: h
查阅相关资料,了解到使用ImagesPipeline传入的url地址必须是一个list,而我写的是一个字符串,所以报错,所以需要修改一下传入的url格式就行了 def parse_detail(sel ...
- 0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用
一.Ribbon 同Eureka使用,注意事项 前几节一同使用,注意事项: 如果没有其他区域数据源,则根据客户端配置进行猜测(与实例配置相反).能够获取eureka.client.availabili ...