Sequence(POJ2442 k小堆问题)
来源:互联网 发布:数字化校园软件 编辑:程序博客网 时间:2024/06/06 02:00
Sequence
Time Limit: 6000MS Memory Limit: 65536KTotal Submissions: 10071 Accepted: 3321
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
题意:每行中取一个数,求和。取最小的n个和。
堆的使用还有很多玄妙,尚未领悟。
题意:每行中取一个数,求和。取最小的n个和。
堆的使用还有很多玄妙,尚未领悟。
#include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <queue> using namespace std;priority_queue<int>que;int m, n;int num[110][2200];int a[2200];int main(){ int T;scanf("%d", &T);while (T--){scanf("%d%d", &m, &n);for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){scanf("%d", &num[i][j]);}}if (m >= 2){int sum1 = 0, sum2 = 0;for (int i = 1; i <= n; i++)sum1 += num[1][i];for (int i = 1; i <= n; i++)sum2 += num[2][i];if (sum1>sum2)swap(num[1], num[2]);}for (int i = 1; i <= n; i++){que.push(num[1][i]);}for (int i = 2; i <= m; i++){sort(num[i] + 1, num[i] + 1 + n);for (int j = 1; j <= n; j++){a[j] = que.top();que.pop();}for (int j = 1; j <= n; j++){que.push(num[i][1] + a[j]);}for (int j = 2; j <= n; j++){for (int k = n; k >= 1; k--)if (num[i][j] + a[k]<que.top()){que.pop();que.push(num[i][j] + a[k]);}else{break;}}}for (int i = 1; i <= n; i++){a[i] = que.top();que.pop();}for (int i = n; i >= 2; i--){printf("%d ", a[i]);}printf("%d\n", a[1]);}}转载地址:http://blog.csdn.net/u011775691/article/details/28644411
阅读全文
0 0
- POJ2442 Sequence【k小堆问题】
- Sequence(POJ2442 k小堆问题)
- POJ2442 Sequence 最大堆
- poj2442 Sequence----堆复习
- poj2442 Sequence(堆)
- Sequence Poj2442 (堆/优先队列)
- poj2442 Sequence
- poj2442---Sequence
- poj2442 Sequence
- poj2442 堆
- poj2442(堆)
- POJ2442 堆
- Problem:POJ2442 - Sequence
- 【优先队列】:poj2442,Sequence
- poj2442 Sequence(水题)
- POJ2442——Sequence
- 【POJ2442】Sequence 解题报告+代码
- poj2442
- sqlite3测试打开关闭数据库的耗时
- Graph Theory NO.9 HDU_1532_Drainage Ditches_最大流
- markdown语法
- Nginx反向代理和负载均衡部署
- 在 Mac 系统下安装 PyCharm 的方法
- Sequence(POJ2442 k小堆问题)
- Java面向对象
- binary-tree-postorder-traversal java code
- 数组的各种操作
- 利用I/O复用模型实现一个时间同步服务器
- [NOIP模拟] 匹配
- 实验:实现基于MYSQL的FTP虚拟用户
- SpringBoot 使用AOP处理请求
- Java WebSocket连接302错误 或者 握手失败错误