HDU4546(优先队列)
题目:比赛难度
题意:给一个整数序列,长度为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(优先队列)相关推荐
- 优先队列的应用 C++实现
优先队列的应用 C++实现 优先队列可以用堆来实现, 堆底层可以用数组表示, 通过索引关系,可以表示成一颗二叉完全树 C++的STL提供了相应的容器适配器 包含在queue头文件中 下面通过一道题来看 ...
- ccf 交通规划(迪杰斯特拉优先队列模板)
什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ...
- c++ std::priority_queue优先队列
template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...
- 《程序设计解题策略》——1.6 利用左偏树实现优先队列的合并
本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.6节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 利用左偏树实 ...
- 排序(一)归并、快排、优先队列等(图文具体解释)
排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次.在剩下的元素中找到最小的元素.将它与数组的第二个元素交换位置. 如此往复,直到将 ...
- MYSQL实现ORDER BY LIMIT的方法以及优先队列(堆排序)
一.MYSQL中的LIMIT和ORACLE中的分页 在MYSQL官方文档中描述limit是在结果集中返回你需要的数据,它可以尽快的返回需要的行而不用管剩下的行, 在ORACLE中也有相关的语法比如 1 ...
- 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 ...
- 暑期集训4:栈,树,优先队列 例 : UVA - 514
2018学校暑期集训第四天--栈,树,优先队列 例题 -- UVA - 514 Rails There is a famous railway station in PopPush City. ...
- pku 1724 ROADS BFS +优先队列
http://poj.org/problem?id=1724 题意: Bob现在有的钱数为k,他想从城市1到城市n,给出m条连接两个城市的有向边,并且给出路的长度w,和经过这条路要交的钱数c.问Bob ...
最新文章
- Struts2中EL表达式取值
- mysql丢失链接_MySQL远程连接丢失问题解决方法
- 设计模式 四人帮_四人帮–代理设计模式
- SpringCloud与Seata分布式事务初体验
- HTML把表格链接进下拉菜单,excel表格下拉菜单怎么做
- [原创]FineUI秘密花园(二十六) — 选项卡控件概述
- -bash : ** : command not found的问题解决(图文详解)
- 牛客网–华为机试在线训练6:质数因子
- tp5 admin.php,TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
- flash rpg网页游戏的成本
- js操作html节点中怎么删除子节点,在JavaScript中删除DOM节点的所有子元素
- 数模学习(10):灰色系统(老哥)
- 领悟《信号与系统》之 信号与系统概论
- supper 关键字
- 【原创】Exchange 用户发送邮件提示:您无权执行此操作,解决办法
- Linux 初始化 init 系统(Systemd)
- PHP计算两个日期相差的天数方法详解
- 32位微型计算机原理接口技术及其应用,32位微型计算机原理·接口技术及其应用...
- Android应用开发编译框架流程与IDE及Gradle概要,安卓常见面试题
- 【渗透测试笔记】之【钓鱼姿势——exe伪装word文档(exe图标修改方法)】