poj 2442 Sequence(贪心,堆)

C++手写堆的实现(LuoguP3378模板) 关于堆二叉堆有两种形式,分别为大根堆和小根堆。 大根堆有两个性质: 1.根节点点权为所有节点点权中的最大值; 2.任意节点的点权都大于它的子节点. 同样地,小根堆也具有两个性质,并且与大根堆相反: 1.根节点点权为所有点权中的最小值; 2.任意节点的点权都小于它的子节点. 在此仅展示小根堆的实现方法,大根堆与其同理,稍作修改即可。LuoguP3378【模板】堆题目描述如题,初始小根堆为 阅读详情
Sequence
Time Limit: 6000MS Memory Limit: 65536K
Total Submissions: 8976 Accepted: 2996

Description

Given m sequences, each contains n non-negative integer. Now we may select one number from each sequence to form a sequence with m integers. It's clear that we may get n ^ m this kind of sequences. Then we can calculate the sum of numbers in each sequence, and get n ^ m values. What we need is the smallest n sums. Could you help us?

Input

The first line is an integer T, which shows the number of test cases, and then T test cases follow. The first line of each case contains two integers m, n (0 < m <= 100, 0 < n <= 2000). The following m lines indicate the m sequence respectively. No integer in the sequence is greater than 10000.

Output

For each test case, print a line with the smallest n sums in increasing order, which is separated by a space.

Sample Input

1
2 3
1 2 3
2 2 3

Sample Output

3 3 4

Source

POJ Monthly,Guang Lin


题目大意;


给你m行,每行有n个数。 分别从每一行取一位数,然后加和。这样的数一定会构成m^n个。输出最小的n个即可。


动态维护前n小

用堆或优先队列都可以


heap实现:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 2005;
int a[maxn], b[maxn], sum[maxn];
int main(void)
{
    int t, m, n;
    cin >> t;
    while(t--)
    {
        scanf("%d%d", &m, &n);
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        for(int i = 1; i < m; i++)
        {
            sort(a, a+n);
            for(int j = 0; j < n; j++) scanf("%d", &b[j]);
            sort(b, b+n);
            for(int j = 0; j < n; j++) sum[j] = a[j]+b[0];
            make_heap(sum, sum+n);
            for(int j = 1; j < n; j++)
                for(int k = 0; k < n; k++)
                {
                    int temp = b[j]+a[k];
                    if(temp >= sum[0]) break;
                    pop_heap(sum, sum+n);
                    sum[n-1] = temp;
                    push_heap(sum, sum+n);
                }
            for(int j = 0; j < n; j++) a[j] = sum[n-j-1];
        }
        sort(a, a+n);
        for(int i = 0; i < n; i++)
        {
            if(i) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
    return 0;
}

priority_queue实现:

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn = 2005;
int a[maxn], b[maxn];
int main(void)
{
    int t, m, n;
    cin >> t;
    while(t--)
    {
        priority_queue<int, vector<int>, less<int> > pq;
        while(!pq.empty()) pq.pop();
        scanf("%d%d", &m, &n);
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        for(int i = 1; i < m; i++)
        {
            sort(a, a+n);
            for(int j = 0; j < n; j++) scanf("%d", &b[j]);
            sort(b, b+n);
            for(int j = 0; j < n; j++)
                for(int k = 0; k < n; k++)
                {
                    if(pq.size() == n && a[j]+b[k] >= pq.top()) break;
                    else if(pq.size() < n) pq.push(a[j]+b[k]);
                    else
                    {
                        pq.pop();
                        pq.push(a[j]+b[k]);
                    }
                }
            int k = 0;
            while(!pq.empty())
            {
                a[k++] = pq.top();
                pq.pop();
            }
        }
        sort(a, a+n);
        for(int i = 0; i < n; i++)
        {
            if(i) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
    return 0;
}




PLSQL Developer新手必看:如何避免安装过程中的常见坑 本文为PL/SQL Developer新手提供了详尽的安装与配置避坑指南。从版本选择、注册码使用、汉化包安装到Oracle客户端连接配置,逐一解析常见问题并提供解决方案,帮助开发者快速搭建稳定的PL/SQL开发环境,顺利开启Oracle数据库编程工作。 阅读详情

相关推荐

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

POJ 2442 Sequence (手写堆)

我晕啊,我的堆都是手写的,用的时间还是438ms ,他们的100+ms 是怎么写出来的啊...写一个最小堆,想死的心都有了..各种错.. #include #include #include #include #include #include #include #include #include #define LL long long #define DB doub

binwin20 1284

如何用Bertalign快速搞定多语言句对齐?5分钟上手教程(附避坑指南)

本文详细介绍了如何利用Bertalign工具快速实现多语言句对齐,从安装配置到实战应用的全流程指南。通过LaBSE句向量技术,Bertalign显著提升了对齐准确率,支持25种语言的任意组合,特别适合处理复杂句式。文章还提供了常见问题的解决方案和性能优化技巧,帮助用户高效完成多语言文本对齐任务。

weixin_42538752的博客 352

2442 Sequence 堆

SequenceTime Limit: 6000MS Memory Limit: 65536KTotal Submissions: 3721 Accepted: 1090<br />DescriptionGiven m sequences, each contains n non

kongming_acm的专栏 573

SAP 接口测试操作-业务顾问

业务顾问测试接口操作

weixin_43657667的博客 5163

【免费】最新区块链钱包和私钥的助记词碰撞器,bybit使用python开发

【免费】最新助记词钱包碰撞器,全链全网络,一周左右就有,稳定高效。

weixin_48529185的博客 1万+

蓝书(算法竞赛进阶指南)刷题记录——POJ2442 Sequence(贪心+堆)

题目:POJ2442. 题目大意:给定mmm个长度为nnn的序列,要求在每一个序列中取出一个数并求和,总共会得到nmn^mnm个和,现在要求这之中最小的nnn个. 1≤n≤2∗103,1≤m≤1001\leq n\leq 2*10^3,1\leq m\leq 1001≤n≤2∗103,1≤m≤100. 首先先考虑m=2m=2m=2怎么做. 对于两个序列,我们把这两个序列分别从小到大排序.设排序后两...

hzk_cpp的博客 323

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4083

【POJ2442】Sequence 解题报告+代码

#include #include #include #include #include #include #include //#define INPUT using namespace std; /** Problem:POJ2442 - Sequence Begin Time : 2nd/March/2012 1:00 p.m. End Time: 2n

c0de4fun的完美算(nei)法(he)教室-我们仍不知道,那天调用的驱动的名字。 2213

王爽《汇编语言》课程设计2(不涉及软盘版本)

assume cs:code,ds:data,ss:stack stack segment db 128 dup (0) stack ends data segment db 256 dup (0) data ends code segment start: mov ax,stack mov ss,ax mov sp,128 ...

weixin_41944412的博客 1179

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

本文介绍了一个基于YOLOv5的飞行器目标识别系统的开发过程。系统包含数据采集与标注、模型训练、实时检测和UI界面四大模块。文章详细讲解了从环境搭建、数据标注到YOLOv5模型训练的全流程,包括如何划分数据集、配置参数和测试模型性能。同时提供了实时检测代码示例和UI界面开发思路,使读者能够快速实现一个完整的智能检测系统。该系统可应用于军事侦察、民用巡检等领域,具有较高的实用价值,适合作为计算机视觉相关的毕业设计项目。

FJN110的博客 108

Problem:POJ2442 - Sequence

Problem:POJ2442 - Sequence Begin Time : 2nd/March/2012 1:00 p.m. End Time: 2nd/March/2012 4:14 p.m Cost Time: 3H 14Min 看的别人的解题报告过的,非常感谢 http://hi.baidu.com/%C0%B6%C9%ABarch/blog/item/f9d343f49cd92e

MTT_SKY 553

代谢组数据分析(三):代谢组降维分析

本文详细介绍了代谢组学中常用的降维分析方法,包括PCA、PLS-DA和OPLS-DA。PCA通过线性变换降低数据维度,便于数据可视化和异常值检测;PLS-DA是一种有监督的模式识别方法,适用于分类和预测;OPLS-DA通过正交分解避免过拟合,更准确地筛选差异代谢物。降维分析在揭示样本间差异和发现生物标志物方面具有重要意义

专注生信领域 3791

POJ2442 Sequence

题目链接:https://vjudge.net/problem/POJ-2442 题目大意:   有 \(m\) 个序列,每个序列 \(n\) 个数。在每个序列中选一个数,会选出 \(m\) 个数,对应一个和。那么对于所有的数,总共有 \(m^n\) 种选法,要求从小到大输出其中和最小的 \(n\) 种选法对应的和。 知识点:  优先队列 解题思路:   对于 \(2\) 个序...

dielie6462的博客 150

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

电子学会 青少年软件编程(202209)(C语言)(树&堆&图)等级考试(七级)试题 T3 Sequence

电子学会 青少年软件编程(202209)(C语言)(树&堆&图)等级考试(七级)试题 T3 Sequence

青少年趣味编程 473

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2442. Sequence (POJ)

题意理解 给定m×n矩阵,一次从每行各取一个数,加起来计算总和,一共有n×m个和,求前n小和的序列。m&lt;500,n&lt;2000 问题分析 用堆数据结构+贪心算法 直接计算m×n个和再排序显得笨。参考网上的思路,对矩阵每行从小到大排序,当m=1时,前n个和等于第一行元素;设m=k时,前k行的前n小和已知。那么当m=k+1时,前k+1的前n小和是,前n小和与k+1行元素逐个相加得到。...

xiexie1357的专栏 264

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

poj 2442

Sequence Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8625 Accepted: 2846 Description Given m sequences, each contains n non-negative integer. Now we

mtxxxx的blog 512

POJ - 2442 Sequence

Description Given m sequences, each contains n non-negative integer. Now we may select one number from each sequence to form a sequence with m integers. It's clear that we may get n ^ m this kind o

那些年 1005

POJ2442 Sequence(堆的骚操作)

Description Given m sequences, each contains n non-negative integer. Now we may select one number from each sequence to form a sequence with m integers. It's clear that we may get n ^ m this kin...

weixin_30666401的博客 130

POJ 2442Sequence

Sequence Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 9144   Accepted: 3046 Description Given m sequences, each contains n non-negative integer. Now we ma

提拉米苏的博客 465

POJ 2442 优先队列

Sequence Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8859   Accepted: 2938 Description Given m sequences, each contains n non-negative integer. Now we ma

liang654213的博客 312

【算法】二叉堆

二叉堆具体来说就是支持插入删除查询最值的数据结构,是一棵满足堆性质的完全二叉树,树上的每一个节点对应一个权值。若树中的任意一个节点的权值都小于其父节点的权值,则称该二叉树满足大根堆性质,即我们常说的大根堆。若书中任意一个节点的全职都打与其父亲节点的权值,则称该二叉树满足小根堆性质,即小根堆。二者统称为二叉堆。 我们可以通过STL(c++标准模板库)中的优先队列较为方便的实现堆的功能。 【...

Nerdant 326

2017 Multi-University Training Contest - Team 1 1002 Balala Power!(贪心)

题意:给你n个由小写字母组成的字符串,让你给26个字母分配0-25,每个字符串形成一个26进制的数字,问怎么分 配权值这n个数的和最大。(不能有前导0,但是单个0可以) 官方题解:每个字符对答案的贡献都可以看作一个 26 进制的数字,问题相当于要给这些贡献加一个 0 到 25 的权重使得答案最大。最大的数匹配 25,次大的数匹配 24,依次类推。排序后这样依次贪心即可,唯一注意的是不能

CillyB的博客 1508

2016 EC-Final Problem D. Ice Cream Tower(二分+贪心)

题目地址:点击打开链接 题意:有N个冰淇淋球,做一个冰淇淋需要K个球,这K个球还必须满足上下相邻的下面比上面大至少两倍。先给出N个球的质量,问最多能做出多少个冰淇淋? 思路:二分可以做的冰淇淋数,贪心验证是否可以堆成,将冰淇淋按从小到大排序,一层一层贪心地堆就可以了,因为 这个冰淇淋如果当前不能用上,那么后续更不可能用上。 代码: #include using n

CillyB的博客 1273

第七届福建省赛 FZU 2267 The Bigger the Better(贪心 后缀数组)

题意:给你两个数组,让你将这两个数组合并成一个数组,每个数组的内部顺序不能改变,让你求合并能得到字典序最大的数组。 (n 思路:正常的贪心的思路是用两个指针从两个开头开始比较,谁大谁先放,但是问题在于碰到两个相等的时候谁先放,思路是往后 找第一个不相等的,谁的大谁先,但是这样会n^2复杂度。我们可以利用后缀数组将两个数组合并(中间位置要放0,比如 1 1 X 1 1  2比较后应该

CillyB的博客 1081

hdu 5248 序列变换(二分+贪心)

题目地址:点击打开链接 思路: 二分套路题,二分最小代价,贪心去验证是否能变成递增序列,验证时要尽可能让每个数 变得最小。 代码: #include #include #include using namespace std; const int maxn = 1e5+5; int a[maxn], n, t, ca = 1; bool judge(int x) {

CillyB的博客 861
上一篇: STL之堆的使用
下一篇: poj 3186 Treats for the Cows(区间dp)
cillyb
博客等级 码龄11年 225粉丝 497原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值