POJ2442 Sequence

 

题目链接

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <queue>
#include <algorithm>

using namespace std;

const int maxn = 2000+10;

int a[maxn], b[maxn];

int main() {
    int T, n, m;
    
    scanf("%d", &T);

    while(T--) {
        priority_queue<int> que;
        
        scanf("%d %d", &n, &m);

        for(int i=0; i<m; i++) {
            scanf("%d", &a[i]);
        }

        sort(a, a+m);
        
        for(int k=1; k<n; k++) {
            for(int i=0; i<m; i++) {
                scanf("%d", &b[i]);
            }

            sort(b, b+m);
            
            for(int i=0; i<m; i++) {
                que.push(a[0] + b[i]);
            }

            for(int i=1; i<m; i++) {
                for(int j=0; j<m; j++) {
                    if(a[i] + b[j] > que.top()) break;
                    que.pop();
                    que.push(a[i]+b[j]);
                }
            }
            
            for(int i=m-1; i>=0; i--) {
                a[i] = que.top();
                que.pop();
            }
        }

        for(int i=0; i<m; i++) {
            if(i != m-1) printf("%d ", a[i]);
            else printf("%d", a[i]);
        }
        putchar('\n');
    }
    
    return 0;
}

 

posted on 2013-08-20 10:36  Still_Raining  阅读(220)  评论(0编辑  收藏  举报