在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
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP