通过从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){
   //用于对数组进行排序
   sort(arr1,length);
   sort(arr2,length);
   int sum=0;
   int i;
   //添加arr1的最后X个元素和arr2的最后Y个元素
   for(i=0;i<X;i++){
      sum+=arr1[length-i-1];
   }
   for(i=0;i<Y;i++){
      sum+=arr2[length-i-1];
   }
   return(sum);
}
//驱动程序
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