// 题意:有 m个序列,每个序列 n个元素,从每个序列中选择一个元素组成一个数并计算和, // 总共有 n^m 个和,输出最小的 n个和 // 思路:用STL的堆解决,将第一个序列读入arr1中,升序排序;将第二个序列读入arr2中,升序排序 // 将arr2[0]+arr1[0...n]读入heap,之后建大顶堆 make_heap(heap,heap+n); // 其后,对于i=1...n-1,将t=arr2[i]+arr1[0...n]与堆顶作比较,若小于堆顶,则删除原堆顶结点,并将t压入,否则退出 // 把heap复制到arr1数组并排序,这样arr1 就保存着当前最小的n个和.再继续以上过程. #include #include using namespace std; int arr1[2002],arr2[2002],heap[2002]; int main() { int cases,n,m; cin>>cases; while(cases--) { cin>>m>>n; for(int i=0;i >arr1[i]; sort(arr1,arr1+n); while(--m) { for(int i=0;i >arr2[i]; sort(arr2,arr2+n); for(int i=0;i