Đối với hai mảng đã cho, mỗi mảng có kích thước N, nhiệm vụ là tìm tổng lớn nhất bằng cách chọn X phần tử từ mảng 1 và phần tử Y từ mảng 2.
Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -
Đầu vào
arr1 = {1,2,3,4,5} ; X=2 arr2 = {1,3,5,2,7}; Y=3
Đầu ra
Maximum sum here is : 24
Giải thích - Chúng tôi đang chọn 2 số từ arr1 và 3 từ arr2. 2 lớn nhất của arr1 là 4,5 và 3 lớn nhất của arr2 là 3,5,7. Tổng cộng của 5 phần tử này là 24, đây là mức tối đa theo yêu cầu.
Đầu vào
arr1 = {10,13,16,14}; X=1 arr2 = {4,1,2,1}; Y=2
Đầu ra
Maximum sum here is : 22
Giải thích - Chúng tôi đang chọn 1 số từ arr1 và 2 từ arr2. Lớn nhất của arr1 là 16 và 2 lớn nhất của arr2 là 4,2. Tổng cộng của 5 phần tử này là 22, tối đa theo yêu cầu.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Lấy mảng đầu vào arr1 [] và arr2 [] và các giá trị cho X và Y ..
-
Sắp xếp hai mảng theo thứ tự tăng dần.
-
Lấy X phần tử cuối cùng từ arr1 và Y từ arr2 vì chúng sẽ là phần tử cao nhất.
-
Cuối cùng, chúng tôi trả về tổng các phần tử đã chọn ở bước 3 vì nó sẽ là giá trị lớn nhất.
-
Lưu ý:sort (arr [], int) được giả sử để trả về mảng đã sắp xếp.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -
Maximized sum of X+Y elements by picking X and Y elements from 1st and 2nd array is 19