堆 poj 2442
t组数据
n m
给 n*m的矩阵
从每行拿出一个数 可有n^m个组合
求前n小的输出
维护前n小的数组
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector> using namespace std;
#define MAXN 100010 struct node//手写个堆 大顶堆
{
int Size;
int z[MAXN];
void clear()
{
Size=;
memset(z,,sizeof(z));
}
bool empty()
{
return Size?:;
}
void shift_up(int a)
{
while(a>)
{
if(z[a]>z[a>>])
{
swap(z[a],z[a>>]);
a=a>>;
}
else
break;
}
}
void shift_down(int a)
{
while((a<<)<=Size)
{
int b=a<<;
if(b<Size&&z[b]<z[b+])
b++;
if(z[a]<z[b])
{
swap(z[a],z[b]);
a=b;
}
else
break;
}
}
int top()
{
return z[];
}
void pop()
{
swap(z[],z[Size]);
Size--;
shift_down();
}
void push(int a)
{
z[++Size]=a;
shift_up(Size);
}
}; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
vector<int>a,b;
node Q;
a.clear();
b.clear();
Q.clear(); for(int i=;i<m;i++)
{
int w;
scanf("%d",&w);
a.push_back(w);
}
sort(a.begin(),a.end()); for(int i=;i<n;i++)
{
b.clear();
for(int j=;j<m;j++)
{
int w;
scanf("%d",&w);
b.push_back(w);
}
sort(b.begin(),b.end());
for(int j=;j<m;j++) //显然b[0]是一定要放的
Q.push(b[]+a[j]);
for(int j=;j<m;j++)
{
for(int k=;k<m;k++) //然后维护一下就好了
{
if(b[j]+a[k]>Q.top())
break;
else
{
Q.pop();
Q.push(b[j]+a[k]);
}
}
}
for(int j=;j<m;j++)
{
a[m--j]=Q.top();
Q.pop();
}
}
for(int i=;i<m;i++)
printf("%d ",a[i]);
printf("\n"); } return ;
}
堆 poj 2442的更多相关文章
- POJ 2442 Sequence(堆的使用练习)
题目地址:id=2442">POJ 2442 真心没想到这题的思路. .原来是从第一行逐步向下加,每次都仅仅保存前n小的数.顺便练习了下堆.. 只是感觉堆的这样的使用方法用的不太多啊. ...
- Sequence POJ - 2442
Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...
- POJ 2442 - Sequence - [小顶堆][优先队列]
题目链接:http://poj.org/problem?id=2442 Time Limit: 6000MS Memory Limit: 65536K Description Given m sequ ...
- POJ 2442 Sequence【堆】
题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...
- POJ 2442(优先队列 k路归并 堆)
Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...
- POJ 2442 Sequence堆 优先队列
题目描述 给定m个序列,每个序列包含n个非负整数.现在我们可以从每个序列中选择一个数字以形成一个具有m个整数的序列.显然,我们可以得到n ^ m种这种序列.然后,我们可以计算每个序列中的数字总和,并获 ...
- 【POJ 2442】 Sequence
[题目链接] http://poj.org/problem?id=2442 [算法] 堆 [代码] #include <algorithm> #include <bitset> ...
- POJ 2442 Sequence
Pro. 1 给定k个有序表,取其中前n小的数字.组成一个新表,求该表? 算法: 由于 a1[1] < a1[2] < a1[3] ... <a1[n] a2[1] < a2 ...
- poj 2442 Sequence(优先队列)
题目:http://poj.org/problem?id=2442 题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列, 让你求出序列和最小的前n个序列的序列和 ...
随机推荐
- Unity 5 WebGL vs Web Player
起原 Unity5.3中看到Web Player未来将到被取消,根据Unity官方blog中称Unity5.4中将会移除web player. 本文从我知道的知识比较一下webPlayer和WebGL ...
- HOLOLENS的空间管理
http://blog.csdn.net/sun_t89/article/details/52460272
- [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?
- JavaScript Math 对象
JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...
- Firefox访问https出现 ssl_error_weak_server_ephemeral_dh_key错误
一个自签名的内部网站当ff访问时出现以下错误 SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange hands ...
- BZOJ 1834 【ZJOI2010】 network 网络扩容
Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的 ...
- jquery选择器空格与大于号、加号与波浪号的区别
空格:$('parent childchild')表示获取parent下的所有的childchild节点,所有的子孙. 大于号:$('parent > child')表示获取parent下的所有 ...
- eclipse/intellij Idea集成jetty
jetty相对weblogic.jboss.tomcat而言,启动速度快,十分方便开发调试,以下是eclipse里的使用步骤: 一.eclipse->Marketplace里搜索 jetty 一 ...
- [JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】
Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开 ...
- C#中数组Array、ArrayList、泛型List<T>的比较
在C#中数组Array,ArrayList,泛型List都能够存储一组对象,但是在开发中根本不知道用哪个性能最高,下面我们慢慢分析分析. 一.数组Array 数组是一个存储相同类型元素的固定大小的顺序 ...