题目:比赛难度

题意:给一个整数序列,长度为n,求在这个序列的子序列中和为第m大的数。

分析:

设置优先级队列

{

    sum:   当前和

    next:  加入下个元素的和

    ith:   将要考虑的下个元素

}


以next为优先级,小的先出队

读入数据后排序,初始化队列第一个元素(0,a[0],0)

每次出队一个元素,入队(sum,sum+a[ith],ith+1),(next,next+a[ith],ith+1),即是否加上a[ith]都考虑进去了。

这样每次新加入的元素都是下一个最小的(next),进行m次就得到了第m小。

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <queue>
using namespace std;
const int N=100011;
int a[N];
int n,m;
struct Node
{
int sum;
int next;
int ith;
Node(){};
Node(int _sum,int _next,int _ith)
{
sum=_sum;
next=_next;
ith=_ith;
}
bool operator < (const Node &b) const
{
return b.next<next;
}
};
int Solve(int m)
{
priority_queue<Node> Q;
Node tmp;
tmp.sum=0;
tmp.next=a[0];
tmp.ith=0;
Q.push(tmp);
int cnt=0;
a[n]=0;
while(cnt<m)
{
tmp=Q.top();
Q.pop();
if(tmp.ith>=n) continue;
Q.push(Node(tmp.sum,tmp.sum+a[tmp.ith+1],tmp.ith+1));
Q.push(Node(tmp.next,tmp.next+a[tmp.ith+1],tmp.ith+1));
cnt++;
}
for(m=0;!Q.empty();m++)
{
a[m]=Q.top().sum;
Q.pop();
}
sort(a,a+m);
return a[m-1];
}
int main()
{
int t,i,tt=1;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
printf("Case #%d: %d\n",tt++,Solve(m));
}
return 0;
}

HDU4546(优先队列)相关推荐

  1. 优先队列的应用 C++实现

    优先队列的应用 C++实现 优先队列可以用堆来实现, 堆底层可以用数组表示, 通过索引关系,可以表示成一颗二叉完全树 C++的STL提供了相应的容器适配器 包含在queue头文件中 下面通过一道题来看 ...

  2. ccf 交通规划(迪杰斯特拉优先队列模板)

    什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ...

  3. c++ std::priority_queue优先队列

    template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...

  4. 《程序设计解题策略》——1.6 利用左偏树实现优先队列的合并

    本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.6节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 利用左偏树实 ...

  5. 排序(一)归并、快排、优先队列等(图文具体解释)

    排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次.在剩下的元素中找到最小的元素.将它与数组的第二个元素交换位置. 如此往复,直到将 ...

  6. MYSQL实现ORDER BY LIMIT的方法以及优先队列(堆排序)

    一.MYSQL中的LIMIT和ORACLE中的分页 在MYSQL官方文档中描述limit是在结果集中返回你需要的数据,它可以尽快的返回需要的行而不用管剩下的行, 在ORACLE中也有相关的语法比如 1 ...

  7. 373. Find K Pairs with Smallest Sums (java,优先队列)

    题目: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Def ...

  8. 暑期集训4:栈,树,优先队列 例 :  UVA - 514 ​​​​​​​​​​​​​​

    2018学校暑期集训第四天--栈,树,优先队列 例题  --   UVA - 514 Rails There is a famous railway station in PopPush City. ...

  9. pku 1724 ROADS BFS +优先队列

    http://poj.org/problem?id=1724 题意: Bob现在有的钱数为k,他想从城市1到城市n,给出m条连接两个城市的有向边,并且给出路的长度w,和经过这条路要交的钱数c.问Bob ...

最新文章

  1. Struts2中EL表达式取值
  2. mysql丢失链接_MySQL远程连接丢失问题解决方法
  3. 设计模式 四人帮_四人帮–代理设计模式
  4. SpringCloud与Seata分布式事务初体验
  5. HTML把表格链接进下拉菜单,excel表格下拉菜单怎么做
  6. [原创]FineUI秘密花园(二十六) — 选项卡控件概述
  7. -bash : ** : command not found的问题解决(图文详解)
  8. 牛客网–华为机试在线训练6:质数因子
  9. tp5 admin.php,TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
  10. flash rpg网页游戏的成本
  11. js操作html节点中怎么删除子节点,在JavaScript中删除DOM节点的所有子元素
  12. 数模学习(10):灰色系统(老哥)
  13. 领悟《信号与系统》之 信号与系统概论
  14. supper 关键字
  15. 【原创】Exchange 用户发送邮件提示:您无权执行此操作,解决办法
  16. Linux 初始化 init 系统(Systemd)
  17. PHP计算两个日期相差的天数方法详解
  18. 32位微型计算机原理接口技术及其应用,32位微型计算机原理·接口技术及其应用...
  19. Android应用开发编译框架流程与IDE及Gradle概要,安卓常见面试题
  20. 【渗透测试笔记】之【钓鱼姿势——exe伪装word文档(exe图标修改方法)】

热门文章

  1. 观察者模式在源码中的应用
  2. TCP/IP协议的深入分析
  3. vue指令-单向和双向绑定
  4. 百万数据报表导出:使用SXSSFWorkbook完成百万数据报表打印
  5. RocketMQ集群之集群模式讲解
  6. cookie和session常见问题
  7. java 怎么清除画布_HTML5 Canvas 清除画布
  8. redhat6.x_linux学习笔记
  9. Microsoft Dynamics CRM server 2013 一般销售流程之 报价单功能详解
  10. 单多晶之争:光伏技术要靠市场检验