您的位置:首页 > 其它

uva 11997 - K Smallest Sums

2013-10-24 10:13 337 查看
多路并归问题:

代码:

#include<cstdio>
#include<queue>
#include<algorithm>
#define maxn 760
using namespace std;

struct node
{
int s,b;
node(int s,int b):s(s),b(b) {}
bool operator<(const node &t)const
{
return s>t.s;
}
};

void merge(int *a,int *b,int *c,int n)
{
priority_queue<node>q;
for(int i=0; i<n; i++)
q.push(node(a[i]+b[0],0));
for(int i=0; i<n; i++)
{
node no=q.top();
q.pop();
c[i]=no.s;
int bb=no.b;
if(bb+1<n) q.push(node(no.s-b[bb]+b[bb+1],bb+1));
}
}

int a[maxn][maxn];

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
scanf("%d",&a[i][j]);
sort(a[i],a[i]+n);
}
for(int i=1; i<n; i++)
merge(a[0],a[i],a[0],n);
for(int i=0; i<n-1; i++)
printf("%d ",a[0][i]);
printf("%d\n",a[0][n-1]);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: