基本的堆的应用,STL中heap即可搞定。最近手速快了好多啊~
#include<algorithm> #include<iostream> using namespace std; #define MAXN 2008 int a[MAXN], b[MAXN], sum[MAXN]; int main() { int t; cin >> t; while (t--) { int m, n; cin >> m >> n; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 1; i < m; i++) { sort(a, a + n); for (int j = 0; j < n; j++) cin >> b[j]; sort(b, b + n); for (int j = 0; j < n; j++) sum[j] = a[j] + b[0]; make_heap(sum, sum + n); for (int j = 1; j < n; j++) { for (int k = 0; k < n; k++) { int temp = a[k] + b[j]; if (temp >= sum[0]) break; pop_heap(sum, sum + n); sum[n - 1] = temp; push_heap(sum, sum + n); } } for (int j = 0; j < n; j++) a[j] = sum[j]; } sort(a, a + n); for (int j = 0; j < n - 1; j++) cout << a[j]<< " "; cout << a[n-1] << endl; } } |