题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列,
View Code
让你求出序列和最小的前n个序列的序列和。
stl中优先队列的应用;
#include<vector>
#include<queue>
priority_queue<int ,vector<int>,less<int> >que;
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }