码迷,mamicode.com
首页 > 其他好文 > 详细

Sequence

时间:2020-03-21 09:43:52      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:分组   cout   ons   --   wing   16px   sequence   EAP   auto   

# 题意
m个序列,每个里面包含n个非0整数,
现在可以从每个序列中选择一个数字形成具有m个整数的序列
总共有n^m种序列,计算每个序列中的数字之和,得到n^m个值,求这些序列和中的最小的n个值

# 题解

即从m个里面每个选一个,输出最小的n个和

分组,每次都将两个的前n个看作是一个新的,同后面的一块计算,

求出前n小的作为新的一组,一直迭代最后求出的自然就是整个的前n小的

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=2010;
 4 int n,m;
 5 int a[N],c[N],b[N];
 6 typedef pair<int,int> pii;
 7 
 8 void work(){
 9     for(int j=2;j<=m;j++){
10         priority_queue<pii,vector<pii>,greater<pii>>heap;
11         for(int i=1;i<=n;i++){
12             cin>>b[i];
13         }
14 
15         for(int i=1;i<=n;i++){
16             heap.push({a[1]+b[i],1});
17         }
18 
19         for(int i=1;i<=n;i++){
20             auto t = heap.top();
21             c[i]=t.first;
22             int p=t.second;
23             heap.pop();
24             heap.push({t.first-a[p]+a[p+1],p+1});
25         }
26         for(int i=1;i<=n;i++){
27             a[i]=c[i];
28         }
29     }
30 }
31 int main(){
32     int t;
33     cin>>t;
34     while(t--){
35         cin>>m>>n;
36         for(int i=1;i<=n;i++){
37             cin>>a[i];
38         }
39         sort(a+1,a+n+1);
40         work();
41         for(int i=1;i<=n;i++){
42             cout<<a[i]<< ;
43         }
44         cout<<endl;
45     }
46 }

 

Sequence

标签:分组   cout   ons   --   wing   16px   sequence   EAP   auto   

原文地址:https://www.cnblogs.com/hhyx/p/12536315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!