【POJ 2442】Sequence(二叉堆+多路归并)

这篇博客介绍了如何利用二叉堆和多路归并解决POJ 2442题目,即在给定多个序列的情况下,找到整数和最小的新序列。首先对序列进行排序,然后通过小根堆维护每轮合并后的最小值,每次取出最小值后更新序列。整个过程的时间复杂度为O(mnlog(n))。
摘要由CSDN通过智能技术生成

POJ题面:Sequence

题面大意:

给定 m m m 个序列,每个序列包含 n n n 个非负整数。
现在我们可以从每个序列中选取一个整数来新成一个包含有 n n n 个整数的新序列。
显然,我们可以得到 n m n^m nm 个新序列, n m n^m nm 个新序列的整数之和。
求出在这些新序列中,整数之和最小的一个新序列。(输出这个新序列)

思路:

我们可以先考虑 m = 2 m = 2 m=2 的情况。此时,我们有两个序列 { a 1 , a 2 , . . . , a n } \{ a_1,a_2,...,a_n \} { a1,a2,...,an} { b 1 , b 2 , . . . , b n } \{ b_1,b_2,...,b_n\} { b1,b2,...,bn}

如果直接组合,时间直接是 n 2 n^2 n2 的,再考虑 m m m 个序列,时间复杂度直接成 m n 2 mn^2 mn2,这很明显不现实。所以需要进行优化。

我们可以先将序列 a a a 从小到大进行一次排序,再和序列 b b b 进行合并分组:
b 1 + a 1 , b 1 + a 2 , . . . , b 1 + a n b 2 + a 1 , b 2 + a 2 , . . . , b 2 + a n . . . b n + a 1 , b n +

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值