2442 -- Sequence

  真郁闷,明明方法是对的,为什么我的代码老是那么的慢。_(:з」∠)_

  这题要想考虑两列的情况,然后逐列拓展。

代码如下:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <queue>
  6.  
  7. using namespace std;
  8.  
  9. const int N = ;
  10. const int Q = N * N;
  11. template<class T>
  12. struct PriQ {
  13. T q[Q];
  14. int sz;
  15. void clear() { sz = ;}
  16. void up(int k) {
  17. while (k > ) {
  18. if (q[k] < q[k >> ]) swap(q[k >> ], q[k]);
  19. else return ;
  20. k >>= ;
  21. }
  22. }
  23. void push(T x) {
  24. q[++sz] = x;
  25. up(sz);
  26. }
  27. void down(int k) {
  28. while ((k << ) <= sz) {
  29. if ((k << ) == sz || q[k << ] < q[k << | ]) {
  30. if (q[k << ] < q[k]) swap(q[k], q[k << ]);
  31. else return ;
  32. k = k << ;
  33. } else {
  34. if (q[k << | ] < q[k]) swap(q[k], q[k << | ]);
  35. else return ;
  36. k = k << | ;
  37. }
  38. }
  39. }
  40. void pop() {
  41. q[] = q[sz];
  42. sz--;
  43. down();
  44. }
  45. T top() { return q[];}
  46. int size() { return sz;}
  47. } ;
  48. PriQ<int> pq;
  49. int ans[N];
  50. //priority_queue<Node> pq;
  51.  
  52. template<class T>
  53. void priqcon(T *a, PriQ<T> &b, int sz) {
  54. a[] = ;
  55. for (int i = ; i <= sz; i++) {
  56. a[++a[]] = b.top();
  57. b.pop();
  58. }
  59. }
  60.  
  61. int rec[N];
  62.  
  63. int main() {
  64. int T, n, m, x;
  65. scanf("%d", &T);
  66. while (T-- && ~scanf("%d%d", &n, &m)) {
  67. ans[] = ;
  68. ans[] = ;
  69. int mx;
  70. for (int i = ; i < n; i++) {
  71. pq.clear();
  72. mx = ;
  73. for (int j = ; j < m; j++) scanf("%d", &rec[j]);
  74. sort(rec, rec + m);
  75. for (int j = ; j < m; j++) {
  76. x = rec[j];
  77. for (int k = ; k <= ans[]; k++) {
  78. if (pq.sz < m || ans[k] + x < mx) {
  79. pq.push(ans[k] + x);
  80. mx = max(mx, ans[k] + x);
  81. }
  82. }
  83. }
  84. priqcon(ans, pq, m);
  85. }
  86. for (int i = ; i < m; i++) {
  87. if (i) putchar(' ');
  88. printf("%d", ans[i + ]);
  89. }
  90. puts("");
  91. }
  92. return ;
  93. }

  好了,其实做这题并不是我的原意,实际上是为了测试二叉堆有没写错的。

——written by Lyon

poj 2442 Sequence (Priority Queue)的更多相关文章

  1. POJ 2442 Sequence(堆的使用练习)

    题目地址:id=2442">POJ 2442 真心没想到这题的思路. .原来是从第一行逐步向下加,每次都仅仅保存前n小的数.顺便练习了下堆.. 只是感觉堆的这样的使用方法用的不太多啊. ...

  2. POJ 2442 - Sequence - [小顶堆][优先队列]

    题目链接:http://poj.org/problem?id=2442 Time Limit: 6000MS Memory Limit: 65536K Description Given m sequ ...

  3. POJ 2442 Sequence

    Pro. 1 给定k个有序表,取其中前n小的数字.组成一个新表,求该表? 算法: 由于  a1[1] < a1[2] < a1[3] ... <a1[n] a2[1] < a2 ...

  4. poj 2442 Sequence(优先队列)

    题目:http://poj.org/problem?id=2442 题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列, 让你求出序列和最小的前n个序列的序列和 ...

  5. POJ 2442 Sequence 优先队列

    题目: http://poj.org/problem?id=2442 #include <stdio.h> #include <string.h> #include <q ...

  6. POJ 2442 Sequence【堆】

    题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...

  7. POJ 2442 Sequence堆 优先队列

    题目描述 给定m个序列,每个序列包含n个非负整数.现在我们可以从每个序列中选择一个数字以形成一个具有m个整数的序列.显然,我们可以得到n ^ m种这种序列.然后,我们可以计算每个序列中的数字总和,并获 ...

  8. Sequence POJ - 2442

    Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...

  9. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅰ

    许多应用程序都需要处理有序的元素,但不一定要求他们全部有序,或者是不一定要以此就将他们排序.很多情况下我们会手机一些元素,处理当前键值最大的元素,然后再收集更多的元素,再处理当前键值最大的元素.如此这 ...

随机推荐

  1. Mybatis+Spring实现Mysql读写分离

    使用spring AbstractRoutingDatasource实现多数据源 public class DynamicDataSource extends AbstractRoutingDataS ...

  2. 洛谷P2426 删数 [2017年4月计划 动态规划12]

    P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...

  3. bzoj1823满汉全席

    2-sat模板 这篇博客写得非常好 传送门 //Achen #include<algorithm> #include<iostream> #include<cstring ...

  4. Vim 中自定义注释快捷键

    写程序的时候写过的代码不忍心立马删掉,所以注释很多,所以找了下注释的快捷健. 打开 /etc/vim/vimrc文件,添加如下两行代码即可. /* 注释该行 */ map = I/* ^[A */j ...

  5. Spring MVC使用ModelAndView进行重定向(转)

    1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器 ...

  6. SDUT-3377_数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...

  7. Sublime Text3 安装less

    1.安装Sublime 插件 (1)安装LESS插件:因为Sublime不支持Less语法高亮,所以,先安装这个插件,方法: ctrl+shift+p>install Package>输入 ...

  8. 深入浅出Cocoa之消息【转】

    在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC 中的方法调用(ObjC中的术语为消息)跟其他语言中的方法调用差不多,只是形式有些不同而已. 譬如 ...

  9. Wireshark 基本使用方法

    学习于: http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

  10. Directx11教程(65) 渲染到纹理

    原文:Directx11教程(65) 渲染到纹理     通常情况下,我们的render target都是后缓冲,但也可以把render target设置为一个2d 纹理,然后再通过贴图的方式,把这个 ...