poj 2442 Sequence

来源:互联网 发布:中国女人崇洋媚外 知乎 编辑:程序博客网 时间:2024/05/16 03:26

一 原题

Sequence
Time Limit: 6000MS Memory Limit: 65536KTotal Submissions: 10203 Accepted: 3352

Description

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

12 31 2 32 2 3

Sample Output

3 3 4

Source

POJ Monthly,Guang Lin


二 分析

给定一个m行n列的整数矩阵,要求从每一行中取一个数,将得到的m个数求和,这样共有n^m种选法。输出这n^m个和中最小的n个。

维护一个ans数组,表示前k行每行取一个数能得到的最小的n个和。ans有序,利用当前ans和第(k+1)行的数num更新ans数组,更新方法就是维护一个元素个数为n的最大堆。


三 代码

Memory: 296K Time: 1860MS Language: C++ Result: Accepted

/*AUTHOR: maxkibbleLANG: C++PROB: poj 2442 Sequence*/#include<iostream>#include<queue>#include<cstring>#include<algorithm>using namespace std;const int maxm = 105;const int maxn = 2005;int n, m, num[maxn], ans[maxn];priority_queue<int> q;void solve() {cin >> m >> n;for(int i = 0; i < n; i++) {cin >> num[i];}sort(num, num + n);memcpy(ans, num, sizeof(num));for(int i = 1; i < m; i++) {for(int i = 0; i < n; i++) {cin >> num[i];}sort(num, num + n);while(!q.empty()) q.pop();for(int i = 0; i < n; i++) {q.push(ans[0] + num[i]);}for(int i = 1; i < n; i++) {for(int j = 0; j < n; j++) {int val = ans[i] + num[j];if(val > q.top())break;if(val < q.top()) {q.pop();q.push(val);}}}for(int i = n - 1; i >= 0; i--) {ans[i] = q.top();q.pop();}}cout << ans[0];for(int i = 1; i < n; i++)cout << " " << ans[i];cout << endl;}int main() {ios::sync_with_stdio(false);int kase;cin >> kase;while(kase--) {solve();}return 0;}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个鸡蛋重多少克 蜜蜡圆珠克重 克重秤 面料克重计算公式 一个篮球重多少克 纸张厚度与克重对照表 绿松石圆珠克重表 布的克重计算公式 纸张克重与厚度对照表 我对你的爱净重21克 一个篮球大约重多少克 一个鸡蛋大约重多少克 1瓶矿泉水大约重多少克 注塑机的吨位和克重参数对照 克钦吧 科隆 怎么复制 复制机 克雷兄弟 克雷 克顿 克鲁 布达拉宫免门票 日本高清免v 687免在费线 全免黄书软件 免免 兽黑狂妃皇叔逆天宠免费阅读 国庆长假高速免通行费 神秘老公惹不起全文免 免单是什么意思 拼多多免拼单在哪里 拼多多免单 免单 拼多多免单特权 拼多多助力免单怎么助力 免单活动 淘宝免单 拼多多月卡免单 免单群