POJ-2442-Sequence

来源:互联网 发布:手机计算器软件 编辑:程序博客网 时间:2024/04/30 12:27
Sequence
Time Limit: 6000MS Memory Limit: 65536KTotal Submissions: 8855 Accepted: 2937

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 linesindicate(表明) 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
// 一开始a[]开小了, 叫了两发runtime error
// 用优先队列时注意内存
#include<iostream>#include<string.h>#include<stdio.h>#include<math.h>#include<algorithm>#include<queue>#include<vector>using namespace std;int main(){    int t, n, m, x,a[20001];    scanf("%d", &t);    while(t--)    {        scanf("%d%d", &n,&m);        priority_queue< int , vector<int> , greater<int> >qq;        priority_queue< int , vector<int> , less<int> >p;        for(int i = 0; i<n; ++i)        {            if(!i)            {                for(int j = 0; j<m; ++j)                {                    scanf("%d", &x);                    qq.push(x);                }            }            else            {                for(int j = 0; j<m; ++j)                    a[j] = qq.top(), qq.pop();                while(!qq.empty())qq.pop();                for(int j = 0; j<m; ++j)                {                    scanf("%d", &x);                    for(int k = 0; k<m; ++k )                        if((int)p.size()<m)p.push(x+a[k]);                        else if(x+a[k]<p.top())                        {                            p.push(x+a[k]);                            p.pop();                        }                }                while(p.size())                {                    qq.push(p.top());                    p.pop();                }            }        }        for(int i = 0; i<m; ++i)        {            printf("%d%c", qq.top(), (i==m-1)?'\n':' ');            qq.pop();        }    }    return 0;}


0 0
原创粉丝点击