POJ 2442 Sequence【堆】
题目链接:http://poj.org/problem?id=2442
题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加。能得到n^m个不同的结果。要求输出当中前n项。
建立一个以n元数组为底层数组的堆,在这里,利用stl中的make_heap,pop_heap。push_heap等函数解决。
1.将第一组数据输入arr1数组。升序排序。
2.将接下来的数据输入到arr2数组中。而且heap[i]=arr1[0]+arr2[0...n-1]。make_heap(heap,heap+n).
3.arr1数组从1到n-1,比較temp=arr1[i]+arr2[0...n-1]与堆顶的元素。假设temp比較小,则将堆顶元素pop。加入temp到heap;否则跳出循环。
4.将heap中的元素所有赋值给arr1数组,升序排序。反复2,3两步,直到所有数据所有处理完。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#define M 111
#define N 2111
using namespace std;
int arr1[N],arr2[N],heap[N];
int m,n;
int main()
{
int t;
bool s=true;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)
scanf("%d",&arr1[i]);
sort(arr1,arr1+n);
for(int i=1;i<m;i++)
{
for(int j=0;j<n;j++)
scanf("%d",&arr2[j]);
sort(arr2,arr2+n);
for(int j=0;j<n;j++)
heap[j]=arr1[0]+arr2[j];
make_heap(heap,heap+n);
for(int j=1;j<n;j++)
{
for(int k=0;k<n;k++)
{
int temp=arr1[j]+arr2[k];
if(temp<heap[0])
{
pop_heap(heap,heap+n);//将heap里的最大值放在最后,而且又一次修正heap
heap[n-1]=temp;
push_heap(heap,heap+n);
s=false;
}
else
break;
}
if(s)
break;
}
for(int j=0;j<n;j++)
arr1[j]=heap[j];
sort(arr1,arr1+n);
}
for(int i=0;i<n;i++)
printf("%d ",arr1[i]);
printf("\n");
}
return 0;
}
POJ 2442 Sequence【堆】的更多相关文章
- POJ 2442 Sequence(堆的使用练习)
题目地址:id=2442">POJ 2442 真心没想到这题的思路. .原来是从第一行逐步向下加,每次都仅仅保存前n小的数.顺便练习了下堆.. 只是感觉堆的这样的使用方法用的不太多啊. ...
- POJ 2442 Sequence堆 优先队列
题目描述 给定m个序列,每个序列包含n个非负整数.现在我们可以从每个序列中选择一个数字以形成一个具有m个整数的序列.显然,我们可以得到n ^ m种这种序列.然后,我们可以计算每个序列中的数字总和,并获 ...
- poj 2442 Sequence (Priority Queue)
2442 -- Sequence 真郁闷,明明方法是对的,为什么我的代码老是那么的慢._(:з」∠)_ 这题要想考虑两列的情况,然后逐列拓展. 代码如下: #include <cstdio> ...
- POJ 2442 - Sequence - [小顶堆][优先队列]
题目链接:http://poj.org/problem?id=2442 Time Limit: 6000MS Memory Limit: 65536K Description Given m sequ ...
- 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个序列的序列和 ...
- POJ 2442 Sequence 优先队列
题目: http://poj.org/problem?id=2442 #include <stdio.h> #include <string.h> #include <q ...
- Sequence POJ - 2442
Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...
- [POJ 3581]Sequence
[POJ 3581]Sequence 标签: 后缀数组 题目链接 题意 给你一串序列\(A_i\),保证对于$ \forall i \in [2,n],都有A_1 >A_i$. 现在需要把这个序 ...
随机推荐
- Factory Method 和AbstractFactory
对应慕课视频的连接:https://www.imooc.com/video/5316 1,工厂模式的应用场景 有一组类似的对象需要被创建 在编码时不能预见需要被创建哪种类的实例 在系统需要考虑扩展性的 ...
- Python 集成开发环境(IDE)
DiscoverSDK网站进行了一次调查 - 什么是最好的Python IDE,这里是调查的结果 Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本 ...
- Scut游戏服务器引擎之新手入门
1. 开发语言:Scut提供C#或Python两种脚本语言开发,Python脚本的性能会比较差,建议使用编译执行的C#代码: 2. 运行平台:Scut可以Window与Linux平台上运行,Linux ...
- [置顶]
pycurl检测网站性能,pycurl.*_TIME时间问题
今天使用python+pycurl来检测网站性能,使用curl_obj.getinfo(pycurl.*_TIME)来获取各个阶段运行时间 total_time = curl_obj.getinfo( ...
- DevExpress控件之LookupEdit,ComboBoxEdit
ComboBoxEdit 1. ComBoxEdit没有DisplayMember 和 ValueMember 属性,只能获取显示的值2.当前选定值comboBoxEdit1.Propertie ...
- linux下内存
MMU由一个或一组芯片组成.其功能是把逻辑地址映射为物理地址,进行地址转换(MMU是CPU的一部分) 机器指令仍然用逻辑地址指定一个操作数的地址或一条指令的地址 每个逻辑地址都由一个段选择符(16位) ...
- nodejs - 创建服务器(1)
在此之前,确保你已经安装了Node(并且你很会折腾) - 有人说,Java脚本和Java最本质的区别就是一个超会更新,一个死守旧. 如果你没有安装,请去官网下载并且安装:http://nodejs.c ...
- android:scrollbar的一些属性
1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- [javase学习笔记]-8.2 成员变量与静态变量的差别
这一节我们看一看成员变量与静态变量的差别所在. 什么是静态变量呢?我们上节用statickeyword时就提到了静态变量.也就是说用statickeyword修饰的变量就是静态变量. 我们在6.4节学 ...
- java ConcurrentHashMap 初识
“ConcurrentHashMap是一个线程安全的哈希表“,但是不允许key和value为空: HashTable和ConcurrentHashMap都是线程安全的,但是HashTable是同步容器 ...