poj 2442 Sequence (Priority Queue)
真郁闷,明明方法是对的,为什么我的代码老是那么的慢。_(:з」∠)_
这题要想考虑两列的情况,然后逐列拓展。
代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std; const int N = ;
const int Q = N * N;
template<class T>
struct PriQ {
T q[Q];
int sz;
void clear() { sz = ;}
void up(int k) {
while (k > ) {
if (q[k] < q[k >> ]) swap(q[k >> ], q[k]);
else return ;
k >>= ;
}
}
void push(T x) {
q[++sz] = x;
up(sz);
}
void down(int k) {
while ((k << ) <= sz) {
if ((k << ) == sz || q[k << ] < q[k << | ]) {
if (q[k << ] < q[k]) swap(q[k], q[k << ]);
else return ;
k = k << ;
} else {
if (q[k << | ] < q[k]) swap(q[k], q[k << | ]);
else return ;
k = k << | ;
}
}
}
void pop() {
q[] = q[sz];
sz--;
down();
}
T top() { return q[];}
int size() { return sz;}
} ;
PriQ<int> pq;
int ans[N];
//priority_queue<Node> pq; template<class T>
void priqcon(T *a, PriQ<T> &b, int sz) {
a[] = ;
for (int i = ; i <= sz; i++) {
a[++a[]] = b.top();
b.pop();
}
} int rec[N]; int main() {
int T, n, m, x;
scanf("%d", &T);
while (T-- && ~scanf("%d%d", &n, &m)) {
ans[] = ;
ans[] = ;
int mx;
for (int i = ; i < n; i++) {
pq.clear();
mx = ;
for (int j = ; j < m; j++) scanf("%d", &rec[j]);
sort(rec, rec + m);
for (int j = ; j < m; j++) {
x = rec[j];
for (int k = ; k <= ans[]; k++) {
if (pq.sz < m || ans[k] + x < mx) {
pq.push(ans[k] + x);
mx = max(mx, ans[k] + x);
}
}
}
priqcon(ans, pq, m);
}
for (int i = ; i < m; i++) {
if (i) putchar(' ');
printf("%d", ans[i + ]);
}
puts("");
}
return ;
}
好了,其实做这题并不是我的原意,实际上是为了测试二叉堆有没写错的。
——written by Lyon
poj 2442 Sequence (Priority Queue)的更多相关文章
- POJ 2442 Sequence(堆的使用练习)
题目地址:id=2442">POJ 2442 真心没想到这题的思路. .原来是从第一行逐步向下加,每次都仅仅保存前n小的数.顺便练习了下堆.. 只是感觉堆的这样的使用方法用的不太多啊. ...
- 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 ...
- POJ 2442 Sequence【堆】
题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...
- POJ 2442 Sequence堆 优先队列
题目描述 给定m个序列,每个序列包含n个非负整数.现在我们可以从每个序列中选择一个数字以形成一个具有m个整数的序列.显然,我们可以得到n ^ m种这种序列.然后,我们可以计算每个序列中的数字总和,并获 ...
- Sequence POJ - 2442
Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅰ
许多应用程序都需要处理有序的元素,但不一定要求他们全部有序,或者是不一定要以此就将他们排序.很多情况下我们会手机一些元素,处理当前键值最大的元素,然后再收集更多的元素,再处理当前键值最大的元素.如此这 ...
随机推荐
- HDU 1724 自适应辛普森法
//很裸的积分题,直接上模板 #include<stdio.h> #include<math.h> int aa, bb; //函数 double F(double x){ - ...
- org.dom4j.Document 解析xml
1.Java代码 Document doc = DocumentHelper.parseText(xml); // Element rootE = doc.getRootElement(); List ...
- WEB性能测试用例设计
性能测试用例主要分为预期目标用户测试,用户并发测试,疲劳强度与大数据量测试,网络性能测试,服务器性能测试五大部分,具体编写测试用例时要根据实际情况进行裁减,在项目应用中遵守低成本,策略为中心,裁减,完 ...
- MaxCompute技术人背后的故事:从ApacheORC到AliORC
2019大数据技术公开课第一季<技术人生专访>来袭,本季将带领开发者们探讨大数据技术,分享不同国家的工作体验.本文整理自阿里巴巴计算平台事业部高级技术专家吴刚的专访,将为大家介绍Apach ...
- Linux常用命令4 帮助命令
1.帮助命令:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得命令或者配置文件的帮助信息 例如:m ...
- word Stock Market Indices
Stock Market Indices USA Africa Asia and Pacific Canada Europe Middle East South America Internation ...
- 几种常见的flex布局
1,水平等距排列.俩端对齐.垂直方向居顶对齐 html: <div class="container flex"> <div class="div1&q ...
- Bootstrap —— tab切换
tab切换 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- LaTeX Error: File `slashbox.sty' not found. 解决办法
从这里下载对应的文件,解压后把文件放在C:\Latex\2018\texmf-dist\tex\latex 中. 再打开cmd命令窗口,输入texhash刷新!
- python系列之(5)PyMySQL的使用
简介 PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中是使用mysqldb. 安装 pip3 install pymysql 创建连接 #!/usr ...