UVA 11997

來源:互聯網
上載者:User
K Smallest Sums
Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu

[Submit]  
[Go Back]   [Status]  

Description

Problem KK Smallest Sums

You're given k arrays, each array has k integers. There are kk ways to pick exactly one element in each array and calculate the sum of the integers. Your task is to find the k smallest sums among
them.

Input

There will be several test cases. The first line of each case contains an integer k (2<=k<=750). Each of the following k lines contains k positive integers in each array. Each of these integers does not exceed
1,000,000. The input is terminated by end-of-file (EOF). The size of input file does not exceed 5MB.

Output

For each test case, print the k smallest sums, in ascending order.

Sample Input
31 8 59 2 510 7 621 11 2
Output for the Sample Input
9 10 122 2
Rujia Liu's Present 3: A Data Structure Contest Celebrating the 100th Anniversary of Tsinghua University
Special Thanks: Yiming Li
Note: Please make sure to test your program with the gift I/O files before submitting!
將題中K組 數組,簡化成兩兩組合。每次用優先佇列儲存體K個最小數。
#include<cstdio>#include<queue>#include<algorithm>using namespace std;int a[1000][1000];int k;void merge(int id){     priority_queue<int > q;     for(int i=1;i<=k;i++)  q.push(a[1][i]+a[id][1]);     int j=2;     for(int j=1;j<=k;j++){        for(int i=2;i<=k;i++){           if(a[1][j]+a[id][i]<q.top()){               q.pop();               q.push(a[1][j]+a[id][i]);           }           else break;        }     }     int l=k;     while(!q.empty()){         a[1][l--]=q.top();         q.pop();     }}int main(){    while(scanf("%d",&k)!=EOF){        for(int i=1;i<=k;i++){            for(int j=1;j<=k;j++)               scanf("%d",&a[i][j]);            sort(a[i]+1,a[i]+1+k);        }        for(int i=2;i<=k;i++){            merge(i);        }        for(int i=1;i<k;i++) printf("%d ",a[1][i]);        printf("%d\n",a[1][k]);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.