poj 2442

题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列,

让你求出序列和最小的前n个序列的序列和。

stl中优先队列的应用;

#include<vector>

#include<queue>

priority_queue<int ,vector<int>,less<int> >que;

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 #include <queue>
 5 #include <algorithm>
 6 using namespace std;
 7 int main()
 8 {
 9     int t;
10     int n,m;
11     int s1[2010];
12     int s2[2010];
13     priority_queue<int,vector<int>,less<int> >que;
14     scanf("%d",&t);
15     while(t--)
16     {
17         scanf("%d%d",&n,&m);
18         for(int i=0;i<m;i++)
19         scanf("%d",&s1[i]);
20         std::sort(s1,s1+m);
21         for(int i=1;i<n;i++)
22         {
23             for(int j=0;j<m;j++)
24             {
25                 scanf("%d",&s2[j]);
26                 que.push(s1[0]+s2[j]);
27             }
28             std::sort(s2,s2+m);
29             for(int k=1;k<m;k++)
30             for(int l=0;l<m;l++)
31             {
32                 if(s1[k]+s2[l]>que.top())
33                     break;
34                     que.pop();
35                    que.push(s1[k]+s2[l]);
36             }
37             for(int k=0;k<m;k++)
38             {
39                 s1[m-k-1]=que.top();
40                 que.pop();
41             }
42         }
43         printf("%d",s1[0]);
44         for(int i=1;i<m;i++)
45         printf(" %d",s1[i]);
46         puts("");
47     }
48     return 0;
49 }
View Code
原文地址:https://www.cnblogs.com/mafangfang/p/3268731.html