• Sequence《优先队列》


    Description

    Given m sequences, each contains n non-negative integer. Now we may select one number from each sequence to form a sequence with m integers. It's clear that we may get n ^ m this kind of sequences. Then we can calculate the sum of numbers in each sequence, and get n ^ m values. What we need is the smallest n sums. Could you help us?

    Input

    The first line is an integer T, which shows the number of test cases, and then T test cases follow. The first line of each case contains two integers m, n (0 < m <= 100, 0 < n <= 2000). The following m lines indicate the m sequence respectively. No integer in the sequence is greater than 10000.

    Output

    For each test case, print a line with the smallest n sums in increasing order, which is separated by a space.

    Sample Input

    1
    2 3
    1 2 3
    2 2 3
    

    Sample Output

    3 3 4

    这个题的意思不是很难理解,关键是思想,一点点算肯定超时了;
     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdio>
     5 #include<queue>
     6 using namespace std;
     7 int main()
     8 {
     9     int m,n,t,a[2005],b[2005],i,j;
    10     priority_queue<int,vector<int>,less<int> >que;
    11     scanf("%d",&t);
    12     while(t--)
    13     {
    14         scanf("%d %d",&m,&n);
    15         m--;
    16         for(i=0; i<n; i++)
    17             scanf("%d",&a[i]);
    18         sort(a,a+n);
    19         while(m--)
    20         {
    21             for(i=0; i<n; i++)
    22             {
    23                 scanf("%d",&b[i]);
    24                 que.push(a[0]+b[i]);//先进去N个
    25             }
    26             sort(b,b+n);//这个应该会用了
    27             for(i=1; i<n; i++)
    28             {
    29                 for(j=0; j<n; j++)
    30                 {
    31                     if(a[i]+b[j]>que.top())//因为有sort排序,所以,后面只会更大,可以break;
    32                         break;
    33                     que.pop();
    34                     que.push(a[i]+b[j]);
    35                 }
    36             }
    37             for(i=n-1; i>-1; i--)
    38             {
    39                 a[i]=que.top();
    40                 que.pop();
    41             }
    42         }
    43         printf("%d",a[0]);
    44         for(i=1; i<n; i++)
    45             printf(" %d",a[i]);
    46         printf("
    ");
    47     }
    48     return 0;
    49 }
    View Code
     
  • 相关阅读:
    题解 P4111 [HEOI2015]小 Z 的房间
    题解 P3317 [SDOI2014]重建
    题解 P4336 [SHOI2016]黑暗前的幻想乡
    NOIP 模拟 7 考试总结
    NOIP 模拟 7 回家
    NOIP 模拟 7 寿司
    MySQL: 多表查询
    MySQL:设计演员与角色表(多对多)
    MySQL:设计省&市表 (一对多)
    MySQL:多表关系设计(一对多 / 多对多 / 一对一)
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3272869.html
Copyright © 2020-2023  润新知