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 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

这个题的意思不是很难理解,关键是思想,一点点算肯定超时了;
 1 #include<iostream>

 2 #include<cstring>

 3 #include<algorithm>

 4 #include<cstdio>

 5 #include<queue>

 6 using namespace std;

 7 int main()

 8 {

 9     int m,n,t,a[2005],b[2005],i,j;

10     priority_queue<int,vector<int>,less<int> >que;

11     scanf("%d",&t);

12     while(t--)

13     {

14         scanf("%d %d",&m,&n);

15         m--;

16         for(i=0; i<n; i++)

17             scanf("%d",&a[i]);

18         sort(a,a+n);

19         while(m--)

20         {

21             for(i=0; i<n; i++)

22             {

23                 scanf("%d",&b[i]);

24                 que.push(a[0]+b[i]);//先进去N个

25             }

26             sort(b,b+n);//这个应该会用了

27             for(i=1; i<n; i++)

28             {

29                 for(j=0; j<n; j++)

30                 {

31                     if(a[i]+b[j]>que.top())//因为有sort排序,所以,后面只会更大,可以break;

32                         break;

33                     que.pop();

34                     que.push(a[i]+b[j]);

35                 }

36             }

37             for(i=n-1; i>-1; i--)

38             {

39                 a[i]=que.top();

40                 que.pop();

41             }

42         }

43         printf("%d",a[0]);

44         for(i=1; i<n; i++)

45             printf(" %d",a[i]);

46         printf("\n");

47     }

48     return 0;

49 }
View Code

 

 

你可能感兴趣的:(sequence)