求查!大佬
查看原帖
求查!大佬
748329
zhouzerui楼主2023/10/2 21:30
#include<bits/stdc++.h>
using namespace std;
int k;
vector<int> w[760];
struct node
{
    int i,j,sum;
    inline bool operator <(const node &x) const
    {
        return sum>x.sum; 
    }
};
priority_queue <node> q;
vector<int> merge(vector<int> a,vector<int> b)
{
	vector<int>ans;
	for(int t=0;t<k;t++)
	{
		q.push(node{t,0,a[t]+b[0]});
	}
	for(int t=1;t<=k;t++)
	{
		node v=q.top();q.pop();
		ans.push_back(v.sum);
		q.push(node{v.i,v.j+1,a[v.i]+b[v.j+1]});
	}
	return ans;
}
int main()
{
	while(cin>>k && k)
	{
		for(int i=1;i<=k;i++)
		{
			for(int j=1;j<=k;j++)
			{
				int t;
				cin>>t;
				w[i].push_back(t);
			}
			sort(w[i].begin(),w[i].end());
		}
		vector<int> v=merge(w[1],w[2]);
		for(int i=3;i<=k;i++)
		{
			v=merge(v,w[i]);
		}
		for(int i=0;i<k;i++) cout<<v[i]<<" ";
		cout<<endl;
	}
	return 0;
 } 
2023/10/2 21:30
加载中...