POJ 2442 Sequence

题目大意:

输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和

 

注意:这题的m,n是反着的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;

int T,n,m,sum,num,len;
int a[2005],old[2005];
int main()
{
    scanf("%d",&T);
    for(;T>0;T--)
    {
        scanf("%d%d",&n,&m);
        for(int  j=1;j<=m;j++)
          scanf("%d",&old[j]);
        sort(old+1,old+1+m);
        sort(old+1,old+1+m);

        for(int i=2;i<=n;i++)
        {
            for(int  j=1;j<=m;j++) scanf("%d",&a[j]);
            sort(a+1,a+m+1);
            priority_queue<int> Q;
            for(int j=1;j<=m;j++)
                Q.push(a[1]+old[j]);
            for(int k=2;k<=m;k++)
            {
                bool flag=0;
                for(int j=1;j<=m;j++)
                {
                    if (Q.top()>old[j]+a[k])
                    {
                        Q.pop();
                        Q.push(old[j]+a[k]);
                        flag=1;
                    } else break;
                }
               if (!flag) break;
            }
            int l=m;
            while(!Q.empty())
            {
                old[l--]=Q.top();
                Q.pop();
            }
        }

        for(int i=1;i<=m;i++)
        {
            printf("%d",old[i]);
            if (i==m) printf("\n");
               else printf(" ");
        }
    }
    return 0;
}

 

posted on 2017-07-17 15:57  Yxter  阅读(89)  评论(0编辑  收藏  举报

导航