Uva11997 优先级队列的应用 多路合并问题
来源:互联网 发布:级域名泛解析多久生效 编辑:程序博客网 时间:2024/04/26 07:56
这题的题意就是给你k个数组,没个数组里有k个值,然后让你求从这k个数组中取一个数,所得的前k个最小的和。
这里应用到了优先级队列,先合并两个数组,求出最小的k个和,然后依次合并其他数组。
这里对于优先级队列的内部函数写的还是不很熟练,以后应该会好点。
代码:
#include<iostream>#include<cstdio>#include<vector>#include<string>#include<queue>#include<algorithm>#include<cstring>#define maxn 1000#define INF 0xfffffff#define mem(a,b) memset(a,b,sizeof(a))#define FOR(i,s,t) for(int i=s;i<=t;i++)#define ull unsigned long long#define ll long longusing namespace std;struct Item{ int s,b;//s=A[i]+B[b]; Item(int s,int b):s(s),b(b){} bool operator < (const Item& it)const//注意这里是const& { return s>it.s; }};void merge(int *A,int *B,int *C,int n)//注意这里的A和B都是有序的{ priority_queue<Item> q; for(int i=0;i<n;i++) { q.push(Item(A[i]+B[0],0)); } for(int i=0;i<n;i++) { Item it=q.top();q.pop(); C[i]=it.s; int b=it.b; if(b+1<n) { q.push(Item(it.s-B[b]+B[b+1],b+1)); } }}int A[maxn][maxn];int main(){ int n; while(scanf("%d",&n)==1) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&A[i][j]); } sort(A[i],A[i]+n); } for(int i=1;i<n;i++)//两两结合 { merge(A[0],A[i],A[0],n); } for(int i=0;i<n;i++) { if(!i) printf("%d",A[0][i]); else printf(" %d",A[0][i]); } printf("\n"); }return 0;}
- Uva11997 优先级队列的应用 多路合并问题
- Uva11997——优先队列,多路合并
- UVA11997 - K Smallest Sums 优先队列,多路归并
- UVA11997 K个最小和_优先队列&&K路合并
- NYOJ284优先级队列的应用
- 堆(优先级队列) 的应用
- hdu5437 优先级队列的应用
- UVA11997求前k个和,多路归并问题
- 优先队列uva11997(好)
- uva11997(优先队列,归并)
- 优先级队列和堆的应用
- 堆的应用——优先级队列
- 堆的应用——优先级队列
- hduProblem-1873优先级队列的应用
- 优先级队列的应用-----迪杰斯特拉算法
- 堆的实现及应用(优先级队列,堆排,TopK问题)
- 基于最小二叉堆的优先级队列-C#实现,以此为基础的K路合并排序算法
- W. :利用最小优先级队列实现对k个已序队列的合并排序。习题6.5-8
- wikioi p1048 石子归并
- c++ 输出流的疑惑(待解)
- 普通类实现枚举类
- csdn博客被一个无名网站套用,不知大家是否也是这样?
- wikioi p1154 能量项链
- Uva11997 优先级队列的应用 多路合并问题
- Objective-C ,ios,iphone开发基础:在UITextField输入完以后,隐藏键盘,
- Ubantu 使用disks工具全盘格式化之后数据恢复
- 【算法】KMP模式匹配算法
- Linux Shell中各种分号和括号的用法总结
- Node.js-require的使用方法
- hdu 4658 Integer Partition 整数划分+生成函数
- android 缓存Bitmap - 开发文档翻译
- javascript 把字符串转换成json对象