Sequence(优先队列)

http://poj.org/problem?id=2442

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

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

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 #include <queue>
 5 #include <algorithm>
 6 using namespace std;
 7 const int N=2002;
 8 
 9 int main()
10 {
11     int T,m,n,arr1[N],arr2[N];
12     priority_queue<int,vector<int>,less<int> >q;
13     scanf("%d",&T);
14     while(T--)
15     {
16         scanf("%d%d",&m,&n);
17         for (int i = 0; i < n; i ++)
18         {
19             scanf("%d",&arr1[i]);
20         }
21         sort(arr1,arr1+n);
22         for (int i = 1; i < m; i ++)
23         {
24             for (int j = 0; j < n; j ++)
25             {
26                 scanf("%d",&arr2[j]);
27                 q.push(arr1[0]+arr2[j]);
28             }
29             sort(arr2,arr2+n);
30             for (int k = 1; k < n; k ++)
31             {
32                 for (int p = 0; p < n; p ++)
33                 {
34                     if (arr1[k]+arr2[p] > q.top())
35                         break;
36                     q.pop();
37                     q.push(arr1[k]+arr2[p]);
38                 }
39             }
40             for (int k = 0; k < n; k ++)
41             {
42                 arr1[n-1-k] = q.top();
43                 q.pop();
44             }
45         }
46         for (int i = 0; i < n; i ++)
47         {
48             if (i==n-1)
49                 printf("%d\n",arr1[i]);
50             else
51                 printf("%d ",arr1[i]);
52         }
53     }
54     return 0;
55 }
View Code

 

转载于:https://www.cnblogs.com/lahblogs/p/3269772.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值