ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ที่ประกอบด้วยจำนวนเต็มบวก n ตัว หน้าที่ของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมสูงสุดของลำดับซึ่งไม่มีสามอันที่ต่อเนื่องกันพี>
คำอธิบายปัญหา − ในที่นี้ เราจำเป็นต้องค้นหาผลรวมของลำดับที่สร้างจากอาร์เรย์เพื่อไม่ให้มีองค์ประกอบต่อเนื่องกันสามองค์ประกอบ
องค์ประกอบต่อเนื่องของ อาร์เรย์คือองค์ประกอบที่เป็นไปตามลำดับของดัชนีเดียวกัน
arr[0], arr[1], arr[2], …
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
arr[] ={5, 9, 12, 15}
ผลลัพธ์
32
คำอธิบาย
ผลรวม =5 + 12 + 15 =32
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการสร้างอาร์เรย์เสริมเพื่อเก็บผลรวมจนถึงดัชนีปัจจุบัน แล้วหาผลรวมและตรวจสอบผลรวมจนถึงดัชนีโดยการตรวจสอบหาผลรวมต่อเนื่อง
สำหรับค่าผลรวมสองค่าแรก sumVal[0] =arr[0]sumVal[1] =arr[0] + arr[1]
แล้วค่าที่ 3 ที่จะนำมาพิจารณานั้นไม่สามารถพิจารณาได้โดยตรง และพิจารณาผลรวม เราจะตรวจสอบเงื่อนไขกับสามปัจจุบัน ถ้าพิจารณา arr[i] ให้เพิ่มค่ารวม ไม่รวม arr[i−1] หรือ arr[i−2] ไม่เช่นนั้น ให้ถือว่า arr[i ] ผลรวมยังคงเท่าเดิม
sum[i] =max(sum[i−3] + arr[i−1] + arr[i], sum[i−2] + arr[i], ผลรวม[i−1])ก่อน>ตัวอย่าง
โปรแกรมแสดงการใช้งานโซลูชันของเรา
#includeใช้เนมสเปซ std;int findMaxSubSeqSum(int arr[], int n) { int maxSumArr[n]; maxSumArr[0] =arr[0]; maxSumArr[1] =arr[0] + arr[1]; maxSumArr[2] =max(maxSumArr[1], max(arr[1] + arr[2], arr[0] + arr[2])); สำหรับ (int i =3; i ผลลัพธ์
ผลรวมลำดับสูงสุดที่ไม่มีลำดับที่สามคือ 32