从网上找来了代码,自己又加了优化(先将每次读入的行排序),才结束了漫长的TLE,代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <string>
#include <cctype>
using namespace std;
const int maxn=100010;
int a[2010];
int m,n;
int main(){
int t;
int b,c,flag;
scanf("%d",&t);
while(t--){
priority_queue<int,vector<int>, greater<int> > minheap;
priority_queue<int,vector<int> ,less<int> > maxheap;
scanf("%d %d",&m,&n);
for(int i=0;i<n;i++){
scanf("%d",&b);
minheap.push(b);
}
for(int i=1;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[j]);
}
sort(a,a+n);
while(!minheap.empty()){
b=minheap.top();
minheap.pop();
if(!maxheap.empty() && (b+a[0])>=maxheap.top()) continue;
for(int j=0;j<n;j++){
if(maxheap.size()<n){
maxheap.push(b+a[j]);
}
else if(maxheap.size()==n && maxheap.top()>(b+a[j])){
maxheap.pop();
maxheap.push(b+a[j]);
}
else if(b+a[j]>=maxheap.top()) break;
}
}
while(!maxheap.empty()){
minheap.push(maxheap.top());
maxheap.pop();
}
}
for(int i=0;i<n;i++){
printf("%d ",minheap.top());
minheap.pop();
}
printf("\n");
}//end for while-t
}