博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL--F - Sequence(n*m->之前的最低要求m个月)
阅读量:6331 次
发布时间:2019-06-22

本文共 2820 字,大约阅读时间需要 9 分钟。

F - Sequence
Time Limit:6000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit
 
Status

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

12 31 2 32 2 3

Sample Output

3 3 4
感谢http://www.cnblogs.com/372465774y/archive/2012/07/09/2583866.html

做这个题首先思考两个问题

由这两个得出,要求n个数组每一个数组m个值。数组1和数组2的和找出最小的m个,再用来和数组3求和,找到最小的m个,终于得到全部的数组中的最小的m个

因为每一个数组都是有序的,并且我们要求的最小的m个。数组a[i][j]+队列中的值 > 队首的值,那么a[i][j]加上队列中以后的值都会大于队首。对于我们要求解的最小的m个值无意义。队列中保存了当前数组到之前全部数组的最小的m个和,不断更新队列

#include 
#include
#include
#include
using namespace std;int a[110][2100] , b[2100] ;priority_queue
p ;int main(){ int i , j , k , n , m , t ; scanf("%d", &t); while(t--) { scanf("%d %d", &n, &m); for(i = 0 ; i < n ; i++) { for(j = 0 ; j < m ; j++) scanf("%d", &a[i][j]); sort(a[i],a[i]+m); } for(i = 0 ; i < m ; i++) p.push(a[0][i]) ; for(i = 1 ; i < n ; i++) { for(j = 0 ; j < m ; j++) { b[j] = p.top(); p.pop(); } for(j = 0 ; j < m ; j++) { for(k = m-1 ; k >= 0 ; k--) { if(j == 0) p.push( a[i][j]+b[k] ); else { if( a[i][j] + b[k] < p.top() ) { p.pop(); p.push(a[i][j]+b[k]); } else break; } } } } for(j = 0 ; j < m ; j++) { b[j] = p.top(); p.pop(); } for(j = m-1 ; j >= 0 ; j--) { if(j == 0) printf("%d\n", b[j]); else printf("%d ", b[j]); } } return 0;}


版权声明:转载请注明出处:http://blog.csdn.net/winddreams

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4731914.html,如需转载请自行联系原作者

你可能感兴趣的文章
hdu2830(2009多校第二场) 可交换列最大矩形面积
查看>>
win7中chm无法显示
查看>>
工作杂记
查看>>
Socket的错误码和描述(中英文翻译)
查看>>
算法的乐趣 (王晓华 著)
查看>>
Windows和Linux系统下,虚拟环境安装的全面说明和详细步骤
查看>>
vue 引入bootstarp --webpack
查看>>
codeforce div 377
查看>>
表单验证
查看>>
博客突破10万写点东西
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
查看>>
网址收藏1
查看>>
spring mvc-REST
查看>>
Java反射机制
查看>>
Selenium Web 自动化 - 项目实战环境准备
查看>>
51Nod:1085 背包问题
查看>>
算法导论读书笔记-第十九章-斐波那契堆
查看>>
Nodepad++ 资料整理
查看>>
C#, C++, Java性能对比
查看>>
Linux监控命令之==>free
查看>>