poj 2442 堆的应用(m组数取前n小)
来源:互联网 发布:新手开淘宝 编辑:程序博客网 时间:2024/04/29 17:42
题意:有m组数,每组n个。从每组中取一个数求和,可以得到n^m个和,求这n^m个数中的最小的n个
思路:一组一组数据的处理,建立大顶堆。heap为大顶堆,s数组保存每组数的读入,temp是处理到当前组的前n小的数的递增序列。
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 2002int heap[N],s[N],temp[N];int T,n,m;int cmp(const int *a,const int *b){return (*a)-(*b);}void adjust(int i){int temp = heap[i];i <<= 1;while(i<=n){if(i+1<=n && heap[i+1]>heap[i])i++;if(temp > heap[i])break;heap[i/2] = heap[i];i <<= 1;}heap[i/2] = temp;}int main(){freopen("a.txt","r",stdin);scanf("%d",&T);while(T--){int i,j,loop ;scanf("%d %d",&m,&n);loop = m-1;for(i = 1;i<=n;i++){scanf("%d",&s[i]);heap[i] = s[i];temp[i] = s[i];}for(i = n/2;i>=1;i--)//建立大顶堆adjust(i);qsort(temp+1,n,sizeof(int),cmp);while(loop--){for(i = 1;i<=n;i++)scanf("%d",&s[i]);qsort(s+1,n,sizeof(int),cmp);for(i = 1;i<=n;i++)heap[i] += s[1];for(i = 2;i<=n;i++){for(j = 1;j<=n;j++){if(s[i] + temp[j] < heap[1]){heap[1] = s[i]+temp[j];adjust(1);}elsebreak;}if(j==1)break;}for(i = 1;i<=n;i++)temp[i] = heap[i];qsort(temp+1,n,sizeof(int),cmp);}for(i = 1;i<=n;i++)printf("%d ",temp[i]);printf("\n");}return 0;}
0 0
- poj 2442 堆的应用(m组数取前n小)
- poj 1036 n!/(n-m)!*m!
- POJ 2442 Sequence(堆的应用)
- POJ 2442 Sequence(堆的应用)
- POJ **** Dynamic Median (堆的应用)
- 【zjnu1248】小明的账单(bill) 堆的应用
- poj 2833 堆的应用(去若干最大值最小值)
- poj 2352 (treap 树堆做法,size的应用)
- nyoj 19 擅长排列的小明 【全排列(n中抽取m个数)】
- m个总数中n个数的有序组合(小程序)
- POJ-1150(求排列数P(n,m)中最后一个非0的数字)
- POJ-1150(求排列数P(n,m)中最后一个非0的数字)
- poj 3406:Last digit(求C(n, m)的最后一个非0位)
- POJ 2442 Sequence 堆的思想的应用 STL 堆学习
- 分石子的问题(n个石子放入m个筐子,两堆石子游戏,一堆石子游戏)
- POJ 1442 堆的应用 优先队列
- 把n个物品分成m堆
- POJ 2442-Sequence(优先队列-m组n个数每组取一个求n个最小值)
- LIst的使用
- OVS 响应 OFPT_SET_CONFIG 过程分析
- 计算机系统-计算机硬件及系统发展史
- Matlab求方差,均值,均方差,协方差的函数
- int和NSInteger区别
- poj 2442 堆的应用(m组数取前n小)
- Android下实现静默安装指定APK
- test for this new blog~
- 软件顾问可视设计的得力助手——PowerMockup
- 【HDU】2458 Kindergarten 二分匹配
- UVA10651- Pebble Solitaire(位运算+记忆化搜索)
- hdu 2870
- Android之Goldfish
- hdu 1058 The sum problem