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)-Ⅰ
许多应用程序都需要处理有序的元素,但不一定要求他们全部有序,或者是不一定要以此就将他们排序.很多情况下我们会手机一些元素,处理当前键值最大的元素,然后再收集更多的元素,再处理当前键值最大的元素.如此这 ...
随机推荐
- Mybatis+Spring实现Mysql读写分离
使用spring AbstractRoutingDatasource实现多数据源 public class DynamicDataSource extends AbstractRoutingDataS ...
- 洛谷P2426 删数 [2017年4月计划 动态规划12]
P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...
- bzoj1823满汉全席
2-sat模板 这篇博客写得非常好 传送门 //Achen #include<algorithm> #include<iostream> #include<cstring ...
- Vim 中自定义注释快捷键
写程序的时候写过的代码不忍心立马删掉,所以注释很多,所以找了下注释的快捷健. 打开 /etc/vim/vimrc文件,添加如下两行代码即可. /* 注释该行 */ map = I/* ^[A */j ...
- Spring MVC使用ModelAndView进行重定向(转)
1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器 ...
- SDUT-3377_数据结构实验之查找五:平方之哈希表
数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...
- Sublime Text3 安装less
1.安装Sublime 插件 (1)安装LESS插件:因为Sublime不支持Less语法高亮,所以,先安装这个插件,方法: ctrl+shift+p>install Package>输入 ...
- 深入浅出Cocoa之消息【转】
在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC 中的方法调用(ObjC中的术语为消息)跟其他语言中的方法调用差不多,只是形式有些不同而已. 譬如 ...
- Wireshark 基本使用方法
学习于: http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
- Directx11教程(65) 渲染到纹理
原文:Directx11教程(65) 渲染到纹理 通常情况下,我们的render target都是后缓冲,但也可以把render target设置为一个2d 纹理,然后再通过贴图的方式,把这个 ...