ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อค้นหา Subarray Sum สูงสุดที่ไม่รวมองค์ประกอบบางอย่าง
สำหรับสิ่งนี้ เราจะได้รับอาร์เรย์ขนาด M และ N สองอาร์เรย์ หน้าที่ของเราคือค้นหาอาร์เรย์ย่อยในอาร์เรย์แรก เพื่อไม่ให้มีองค์ประกอบภายในอาร์เรย์ย่อยปรากฏอยู่ในอาร์เรย์ที่สอง และองค์ประกอบของอาร์เรย์ย่อยรวมกันเป็น สูงสุด
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //checking if element is present in second array bool isPresent(int B[], int m, int x) { for (int i = 0; i < m; i++) if (B[i] == x) return true; return false; } int findMaxSubarraySumUtil(int A[], int B[], int n, int m) { int max_so_far = INT_MIN, curr_max = 0; for (int i = 0; i < n; i++) { if (isPresent(B, m, A[i])) { curr_max = 0; continue; } curr_max = max(A[i], curr_max + A[i]); max_so_far = max(max_so_far, curr_max); } return max_so_far; } void findMaxSubarraySum(int A[], int B[], int n, int m) { int maxSubarraySum = findMaxSubarraySumUtil(A, B, n, m); if (maxSubarraySum == INT_MIN) { cout << "Maximum Subarray Sum cant be found" << endl; } else { cout << "The Maximum Subarray Sum = " << maxSubarraySum << endl; } } int main() { int A[] = { 3, 4, 5, -4, 6 }; int B[] = { 1, 8, 5 }; int n = sizeof(A) / sizeof(A[0]); int m = sizeof(B) / sizeof(B[0]); findMaxSubarraySum(A, B, n, m); return 0; }
ผลลัพธ์
The Maximum Subarray Sum = 7