uva_11997,K Smallest Sums优先队列

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int a[1000][1000];
int n;
struct Item
{
    int jx,sum;
    bool operator < (const Item& a)const{
        return sum>a.sum;
    }
};
void solve(int x)
{
    priority_queue<Item>q;
    Item item;
    for(int i=0;i<n;i++)
    {
        item.jx=0,item.sum=a[x][0]+a[0][i];
        q.push(item);
    }
    for(int i=0;i<n;i++)
    {
        Item tem,cur;
        tem=q.top();
        q.pop();
        a[0][i]=tem.sum;
        cur.jx=tem.jx+1;
        cur.sum=tem.sum-a[x][tem.jx]+a[x][cur.jx];
        q.push(cur);
    }
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        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++)
            solve(i);
            cout<<a[0][0];
        for(int i=1;i<n;i++)
            cout<<" "<<a[0][i];
        cout<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/vactor/p/4099990.html