在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
廣告