เราได้รับอาร์เรย์ของจำนวนเต็ม เป้าหมายคือการเพิ่มมูลค่าของนิพจน์สูงสุด −
arr[j]-arr[i] + arr[l]-arr[k]; i
เราจะทำโดยการสำรวจองค์ประกอบทั้งหมดและคำนวณค่าของนิพจน์ หากพบสูงสุดจนถึงตอนนี้ ให้จัดเก็บและส่งคืนในตอนท้าย
อินพุต
arr[]= { 1,2,3,4 }
ผลลัพธ์
Maximum value for above expression is : 2
คำอธิบาย − สำหรับ i
arr[j]-arr[i]+arr[l]-arr[k]=2-1+4-3=1+1=2
อินพุต
arr[]= { 5,5,5,5,5 }
ผลลัพธ์
Maximum value for above expression is : 0
คำอธิบาย − สำหรับ i
arr[j]-arr[i]+arr[l]-arr[k]=5-5+5-5=0
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
อาร์เรย์จำนวนเต็ม a[] เก็บตัวเลข
-
ฟังก์ชัน maximumSum(int arr[], int n) รับอาร์เรย์และความยาว n เป็นอินพุตและส่งกลับค่าสูงสุดของ arr[j]-arr[i]+arr[l]-arr[k] เพื่อให้ i
-
ผลรวมตัวแปรใช้เพื่อเก็บผลรวมของ arr[j]-arr[i] และ arr[l]-arr[k].
-
เริ่มต้น maxx=arr[0] เป็นผลรวมสูงสุดเริ่มต้น
-
อาร์เรย์การเคลื่อนที่จาก i=0, j=1,k=2, l=3 ถึง i
-
สำหรับแต่ละดัชนีใน i,j,k,l คำนวณ arr[j]-arr[i]+arr[l]-arr[k] และเก็บไว้ในผลรวม
-
หากผลรวมปัจจุบัน>=maxx อัปเดตสูงสุด
-
ในที่สุดผลตอบแทนสูงสุดตามผลลัพธ์ที่ต้องการ
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; // function to maximize the sum of selected numbers int maximizeSum(int arr[], int n) { int sum=0; int maxx=arr[0]; for(int i=0;i<n-3;i++) for(int j=i+1;j<n-2;j++) for(int k=j+1;k<n-1;k++) for(int l=k+1;l<n;l++){ sum=arr[j]-arr[i]+arr[l]-arr[k]; if(sum>=maxx) maxx=sum; } return maxx; } int main(){ int a[] = {5, 3, 9, 2, 20}; int n = sizeof(a) / sizeof(a[0]); cout <<"Maximized value is :"<< maximizeSum(a, n); return 0; }
ผลลัพธ์
Maximized value is :24