对于给定的两个大小均为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