在C++中,從第一個陣列和第二個陣列中分別選擇X個和Y個元素,以最大化X+Y元素的總和


給定兩個大小為N的陣列,任務是從陣列1中選擇X個元素,從陣列2中選擇Y個元素,找到最大和。

讓我們用一個例子來理解我們必須做什麼:

輸入

arr1 = {1,2,3,4,5} ; X=2
arr2 = {1,3,5,2,7}; Y=3

輸出

Maximum sum here is : 24

解釋 - 我們從arr1中選擇2個數,從arr2中選擇3個數。arr1中最大的2個數是4,5,arr2中最大的3個數是3,5,7。這5個數的總和是24,根據要求這是最大值。

輸入

arr1 = {10,13,16,14}; X=1
arr2 = {4,1,2,1}; Y=2

輸出

Maximum sum here is : 22

解釋 - 我們從arr1中選擇1個數,從arr2中選擇2個數。arr1中最大的數是16,arr2中最大的2個數是4,2。這5個數的總和是22,根據要求這是最大值。

下面程式中使用的方案如下

  • 輸入陣列arr1[]和arr2[]以及X和Y的值。

  • 將兩個陣列按升序排序。

  • 從arr1中取最後X個元素,從arr2中取最後Y個元素,因為這些將是最大的。

  • 最後,我們返回步驟3中選擇的元素之和,因為這將是最大值。

  • 注意:假設sort(arr[],int)返回排序後的陣列。

示例

#include <iostream>
using namespace std;
int max_sum(int arr1[],int arr2[], int length,int X,int Y){
   //for sorting the array
   sort(arr1,length);
   sort(arr2,length);
   int sum=0;
   int i;
   //adding last X elements from arr1 and last Y elements from arr2
   for(i=0;i<X;i++){
      sum+=arr1[length-i-1];
   }
   for(i=0;i<Y;i++){
      sum+=arr2[length-i-1];
   }
   return(sum);
}
// Driver program
int main(){
   int arr1[]={1,1,1,3,7};
   int arr2[]={1,1,2,3,5};
   int x=3,y=2;
   printf( "Maximized sum of X+Y elements by picking X and Y elements from 1st and 2nd array is %d",max_sum(arr1,arr2,5,x,y));
   return 0;
}

輸出

如果我們執行上面的程式碼,我們將得到以下輸出:

Maximized sum of X+Y elements by picking X and Y elements from 1st and 2nd array is 19

更新於:2020年8月14日

瀏覽量:184

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告