在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