堆 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个序列的序列和 ...
随机推荐
- 分层开发之MySchool
No.1实现登陆功能,验证用户名和密码.从数据库里进行匹配,看是否有符合要求的数据. 在DAL层编写代码,返回值为布尔类型.方法参数为(student实体类对象),使用参数化SqlParameter类 ...
- UNITY在VS中调试
下载地址:https://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=RootCategory&f%5B0 ...
- Ahead-of-time compilation(AOT)
Ahead-of-time (AOT) compilation is the act of compiling a high-level programming language such as C ...
- Apache和Tomcat区别
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置.Apache是web服务 ...
- [No000026]365种创业、办公、和生活成长的精华资源
只需要具备以下技能,人人都可以成为企业家:经得起失败的考验,思维活跃,新点子不断,能够脚踏实地把新点子转化为产品,并在这个过程中坚持不懈,百折不挠,即使跌倒了,也要及时从失败中学习,迅速投入到下一次冒 ...
- sg函数与博弈论
这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...
- xhprof使用笔记(非原创)
[作用] xhprof是facebook开源的一个php性能分析工具. [安装] xhprof扩展的安装: wget http://pecl.php.net/get/xhprof-0.9.2.tg ...
- How to regress out unwanted vectors
Source: http://stats.stackexchange.com/questions/117840/how-to-regress-out-some-variables Answer in ...
- MySQL触发器如何正确使用
MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...
- switch2osm使用open street map离线地图中文乱码方框解决办法
----------written by shenwenkai------------- ubuntu linux环境下,按照网址(https://switch2osm.org/serving-til ...