💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 来自两个数组的 K 个最大和组合 > 原文: [https://www.geeksforgeeks.org/k-maximum-sum-combinations-two-arrays/](https://www.geeksforgeeks.org/k-maximum-sum-combinations-two-arrays/) 给定两个大小相等的数组(`A`,`B`)和`N`(两个数组的大小)。 通过将数组`A`中的一个元素与数组`B`中的另一个元素相加来构成**和组合**。从所有可能的和组合中显示**最大`K`个有效和组合**。 例子: ``` Input : A[] : {3, 2} B[] : {1, 4} K : 2 [Number of maximum sum combinations to be printed] Output : 7 // (A : 3) + (B : 4) 6 // (A : 2) + (B : 4) Input : A[] : {4, 2, 5, 1} B[] : {8, 0, 3, 5} K : 3 Output : 13 // (A : 5) + (B : 8) 12 // (A : 4) + (B : 8) 10 // (A : 2) + (B : 8) ``` **方法 1(朴素算法)**: 我们可以通过将数组`A`中的一个元素和数组`B`中的另一个元素插入到最大堆中来进行所有可能的组合使用暴力。 在最大堆中,最大元素位于根节点,因此,每当我们从最大堆弹出时,我们都会获得堆中存在的最大元素。 插入所有总和组合后,我们从最大堆中取出`K`个元素并显示出来。 下面是上述方法的实现。 ## C++ ```cpp // A simple C++ program to find N maximum // combinations from two arrays, #include <bits/stdc++.h> using namespace std; // function to display first N maximum sum // combinations void KMaxCombinations(int A[], int B[], int N,                                         int K) {     // max heap.     priority_queue<int> pq;     // insert all the possible combinations      // in max heap.     for (int i = 0; i < N; i++)         for (int j = 0; j < N; j++)             pq.push(A[i] + B[j]);     // pop first N elements from max heap     // and display them.     int count = 0;     while (count < K) {         cout << pq.top() << endl;         pq.pop();         count++;     } } // Driver Code. int main() {     int A[] = { 4, 2, 5, 1 };     int B[] = { 8, 0, 5, 3 };     int N = sizeof(A)/sizeof(A[0]);     int K = 3;     KMaxCombinations(A, B, N, K);     return 0; } ```