POJ 2442Sequence
2016-11-22 20:35
387 查看
Sequence
Time Limit: 6000MS | Memory Limit: 65536K | |
Total Submissions: 9144 | Accepted: 3046 |
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
Source
题意:给n行m列,从每行中选出一个数字,n个数字的和sum,有n的m次方个sum,对sum升序,输出前n个sum。
题解:用到优先队列。
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <queue> using namespace std; int main() { int K; int i, j, k, n, m; int a[2010], b[2010]; scanf("%d", &K); while(K--) { cin>>n>>m; for(i = 0; i < m; i++) { scanf("%d", &a[i]); } sort(a, a + m);//对第一行升序。 for(i = 1; i < n; i++) { priority_queue<int, vector<int>, less<int> >q;//大的靠近队列的头。 for(j = 0; j < m; j++) { scanf("%d", &b[j]); } for(j = 0; j < m; j++)//将a中的最小值和b相加,确定临时的最小sum队列 { q.push(a[0] + b[j]); } for(j = 1; j < m; j++)//挨个比较选出a和b中最小的n个sum。 { for(k = 0; k < m; k++) { if(a[j] + b[k] < q.top()) { q.pop(); q.push(a[j] + b[k]); } } } for(j = 0; j < m; j++)//把最小的n个sum赋值给a,下个循环再用。 { a[j] = q.top(); q.pop(); } sort(a, a + m); } for(i = 0; i < m; i++) { if(i == m - 1) printf("%d\n", a[i]); else printf("%d ", a[i]); } } return 0; }
相关文章推荐
- poj 2442 Sequence
- POJ 2442 Sequence(优先队列)
- POJ 2442 Sequence
- POJ 2442 Sequence(堆)
- poj 2442 Sequence(优先队列)
- poj 2442 Sequence
- poj 2442 Sequence
- poj 2442 Sequence 堆
- POJ-2442-Sequence
- POJ 2442 Sequence
- POJ 2442 Sequence
- POJ 2442 Sequence
- POJ 2442 Sequence
- POJ 2442 Sequence
- POJ2442——Sequence
- POJ 2442-Sequence(优先队列-m组n个数每组取一个求n个最小值)
- POJ 2442 Sequence (手写堆)
- POJ 2442 Sequence【堆】