poj 2442 Sequence

【优先队列】:poj2442,Sequence 题目大意是:m行n列的一个数矩阵,每行抽一个数,可以同列,那么有n^m种sequence组合,在这些sequence中,找出:m个元素相加的和 最小的n个sequence组合(输出这n个最小值)。 这个题非常有意思,解题思路如下: 1)对于只有一行,直接输出从小到大的排序。 2)对于大于等于2行,我们采用一行一行计算n个最小值的思路,这样说起来有些抽象;具体的,如果我们只考虑从第 阅读详情

一 原题

Sequence
Time Limit: 6000MS Memory Limit: 65536K
Total Submissions: 10203 Accepted: 3352

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^m种选法。输出这n^m个和中最小的n个。

维护一个ans数组,表示前k行每行取一个数能得到的最小的n个和。ans有序,利用当前ans和第(k+1)行的数num更新ans数组,更新方法就是维护一个元素个数为n的最大堆。


三 代码

Memory: 296K  Time: 1860MS  Language: C++  Result:  Accepted

/*
AUTHOR: maxkibble
LANG: C++
PROB: poj 2442 Sequence
*/

#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxm = 105;
const int maxn = 2005;

int n, m, num[maxn], ans[maxn];
priority_queue<int> q;

void solve() {
	cin >> m >> n;
	for(int i = 0; i < n; i++) {
		cin >> num[i];
	}
	sort(num, num + n);
	memcpy(ans, num, sizeof(num));
	for(int i = 1; i < m; i++) {
		for(int i = 0; i < n; i++) {
			cin >> num[i];
		}
		sort(num, num + n);
		while(!q.empty()) q.pop();
		for(int i = 0; i < n; i++) {
			q.push(ans[0] + num[i]);
		}
		for(int i = 1; i < n; i++) {
			for(int j = 0; j < n; j++) {
				int val = ans[i] + num[j];
				if(val > q.top())
					break;
				if(val < q.top()) {
					q.pop();
					q.push(val);
				}
			}
		}
		for(int i = n - 1; i >= 0; i--) {
			ans[i] = q.top();
			q.pop();
		}
	}
	cout << ans[0];
	for(int i = 1; i < n; i++)
		cout << " " << ans[i];
	cout << endl;
}

int main() {
	ios::sync_with_stdio(false);
	int kase;
	cin >> kase;
	while(kase--) {
		solve();
	}
	return 0;
}


2023东华大学机试OJ进阶版1-81题 先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。 阅读详情

相关推荐

OrthoFinder功能、流程和文件注释

OrthoFinder 的标准输出包括:直系同源组,直系同源基因,有根基因树,解析基因树,无根物种树、有根物种树,基因重复事件以及相关的统计数据。

hs6605015的博客 3046

【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

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 950

【POJ 2442】Sequence

【POJ 2442】Sequence优先队列 m个序列 每个序列n个数 从每个序列中取一个数 可以组成一个长为m的序列 这样一共有n^m种组法 把所有组合的加和排序后输出前n小的和乍一看听高深的一个问题 其实想清楚了很简单 每一组中取一个数相加 第一组可以有n种取法 假设当前只有两组 按题意组合就是将第一组中n个数分别与第二组n个数相加 取出前n小的和那么现在再来一组 前两组一共有n*n种组

ACMer' 1443

金蝶云ERP远程办公指南:零公网IP实现安全内网穿透访问

本文详细介绍了如何利用内网穿透技术,在无需公网IP和复杂路由器设置的情况下,安全远程访问内网部署的金蝶云ERP系统。通过使用cpolar工具,逐步指导用户创建加密隧道、配置固定域名,并实现管理中心与数据中心的远程登录,有效解决了企业员工在外出或居家办公时的核心业务系统访问难题。

weixin_29229261的博客 269

S7-1200g2运动控制实战:从轴组配置到程序调试

本文详细介绍了S7-1200g2运动控制功能的实战应用,从轴组配置到程序调试的全流程。通过TIA Portal中的工艺对象配置,实现单轴、同步轴组等运动控制模型,并分享常见问题排查与性能优化经验,帮助工程师快速掌握中小型自动化设备的运动控制技术。

weixin_28698059的博客 589

Sequence Poj2442 (堆/优先队列)

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

Welcome ! This is Guanpx's blog. 662

高德地图+Three.js实战:手把手教你打造数字农场3D可视化大屏(附完整源码)

本文详细介绍了如何利用高德地图JS API与Three.js技术栈,构建一个功能强大的数字农场3D可视化大屏。文章从技术选型、架构设计出发,深入讲解了坐标对齐、图层管理、性能优化等核心工程实践,并提供了完整的模块化代码示例,旨在为智慧农业及类似场景的3D地理可视化项目提供一套可复用的解决方案。

k8s6orchestrator的博客 890

[poj 2442] Sequence {二叉堆}

题目 http://poj.org/problem?id=2442 解题思路 显然,对两个序列排序,a[1]+b[1]a[1]+b[1]a[1]+b[1]是最小和,然后次小的就是min{a[1]+b[2],a[2]+b[1]}min\{a[1]+b[2],a[2]+b[1]\}min{a[1]+b[2],a[2]+b[1]},一次类推,便能用堆来维护当前的最小值了。 代码 #include&l...

Nowed 440

基于 Python 的 LIF 模型:探索神经元同步与小世界网络

首先,我们定义了一个LIFNeuronself.soma.L = self.soma.diam = 12.6157 # 固定神经元形状self.cm = cm # 电容self.V_rest = V_rest # 静息电位self.V = V_rest # 初始化膜电位在初始化过程中,每个神经元被赋予初始的静息电位,并且其膜电位会在后续的模拟过程中动态变化。

qq_36224726的博客 1424

ABAQUS单元刚度矩阵输出全攻略:从理论到实践(含MTX/DAT文件对比)

本文详细解析了ABAQUS中单元刚度矩阵的输出方法,涵盖理论原理、MTX与DAT文件格式对比及二次开发应用。通过具体操作步骤和性能优化建议,帮助用户高效获取并利用刚度矩阵数据,特别适合需要进行有限元分析验证和二次开发的工程师。

lg888的博客 1006

POJ - 2442 Sequence(二叉堆)

POJ - 2442 Sequence #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace std; typedef pair<int,int> PII; int n,m; void work(vector<int> &a,vector<int> &b) { vector

00后的博客 145

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

POJ 2442 Sequence

这道题的数据真强大,各种写法不是MLE就是TLE,好不容易换了这种写法终于AC了。 题目大意: 输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和。 用优先队列做的,注意限制队列元素个数,否则会超时超内存的。 下面是代码: #include #include using namespace std; int n,m,a[4000005],b[4000005

脑残的孩子只有慢慢学。。 5420

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

POJ2442 Sequence

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

dielie6462的博客 150

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

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

POJ 2442 Sequence

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

anvt77205的博客 163

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ 2442.Sequence

2015-07-14 问题简述:   输入 m 条序列,每条序列有 n 个整数。对每一个序列取一个数,可随机取出 m 个数,求这 m 个数的和,会有 m^n 种情况,输出其中和最小的 n 个数。   原题链接:http://poj.org/problem?id=2442 解题思路:   暴力求解会遍历 m^n 次,时间复杂度太高,不适合这个题,故采用其他方法,比如堆。   运算过程中,

笑卒见清晰 448

POJ2442:Sequence

浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=2442 我们先简化题意,假设只有两行。 那么显然,最小值是\(a_1+b_1\)。并且次小值集合是\(a_2+b_1,a_1+b_2\)。 假设\(a_1+b_2\)是次小值,那么次次小值集合就是\(a_2+b_1,a_2+...

aga28832的博客 184

POJ 2442 Sequence

F - Sequence Time Limit:6000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2442 Description Given m sequences, each contains n non-negativ

叶孤心的专栏 460

POJ2442Sequence

http://poj.org/problem?id=2442 题意 :就是输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和。 思路 : 本来打算是用几个for循环的,后来觉得要是真这么简单就不会在堆里分类了,所以,经过会神详细指导讲解,略懂略懂,弄俩优先队列,正好搞定 1 #include<cstdio> 2 #include<cst...

weixin_30725315的博客 65

poj2442 Sequence

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

樱花满地集于我心,楪舞纷飞祈愿相随 1951
上一篇: usaco6.4.2 Electric Fences
下一篇: poj 1300 Door man
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值