题目:
https://www.acwing.com/problem/content/148/
思路:
见https://www.acwing.com/video/125/
代码:
//折磨
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int N=2010;
int a[N],b[N],c[N];
typedef pair<int,int> PII;
int m,n;
void merge()//归并过程
{
priority_queue<PII,vector<PII>,greater<PII> > heap;
for(int i=1;i<=n;i++) heap.push({a[1]+b[i],1});
for(int i=1;i<=n;i++)
{
auto t=heap.top();
heap.pop();
c[i]=t.first;
heap.push({t.first+a[t.second+1]-a[t.second],t.second+1});
}
for(int i=1;i<=n;i++)
a[i]=c[i];
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<m;i++)
{
for(int j=1;j<=n;j++) cin>>b[j];
merge();
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}