UVa 11997 K Smallest Sums
2014-08-17 02:18
363 查看
//数据结构 #include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <map> #include <algorithm> using namespace std; const int maxn = 1000; int a[maxn][maxn]; int k; struct item{ int val; int num; item(int s,int b):val(s),num(b){} bool operator < (const item& a) const { return val > a.val; } }; void solve(int *A, int *B, int *C){ priority_queue<item>que; for(int i=0;i<k;++i) que.push(item(A[i]+B[0],0)); for(int i=0;i<k;++i){ item tmp = que.top(); C[i]= tmp.val; int b = tmp.num; que.pop(); if(b+1<k) que.push(item(tmp.val-B[b]+B[b+1],b+1)); } } int main() { // int k; //又犯了这种错误 while(~scanf("%d",&k)){ for(int i=0;i<k;++i){ for(int j=0;j<k;++j)scanf("%d",&a[i][j]); sort(a[i],a[i]+k); } for(int i=1;i<k;++i) solve(a[0],a[i],a[0]); for(int i=0;i<k;++i)i==k-1 ? printf("%d\n",a[0][i]) : printf("%d ",a[0][i]); } return 0; }
相关文章推荐
- UVA11997 K Smallest Sums(并归,优先队列)
- UVa - 11997 - K Smallest Sums
- UVA 11997 K Smallest Sums
- UVa-11997 K Smallest Sums 题解
- UVA - 11997 K Smallest Sums
- UVA 11997 K Smallest Sums(优先队列)
- 思路题,多路归并(K Smallest Sums,UVA 11997)
- UVa 11997 K Smallest Sums
- UVA 11997 - K Smallest Sums
- 【优先队列之多路合并】UVA - 11997 K Smallest Sums
- UVA - 11997:K Smallest Sums
- UVA 11997 K Smallest Sums
- UVA11997_K_Smallest_Sums_多路并归_优先队列
- uva 11997 - K Smallest Sums
- (DS 《算法竞赛入门经典》)UVA 11997 K Smallest Sums
- Uva 11997 - K Smallest Sums(多路归并)
- uva 11997 K smallest sums (优先队列 多路归并)
- uva11997 K Smallest Sums(优先队列)
- UVA 11997 - K Smallest Sums(优先队列+多路合并)
- UVa 11997 (优先队列 多路归并) K Smallest Sums