คำชี้แจงปัญหา
รับอาร์เรย์ arr[] ของจำนวนเต็ม N ภารกิจคือการค้นหาผลรวมของอาร์เรย์ย่อยสูงสุดก่อน จากนั้นจึงลบองค์ประกอบออกจากอาร์เรย์ย่อยไม่เกินหนึ่งรายการ นำองค์ประกอบออกไม่เกินองค์ประกอบเดียวเพื่อให้ผลรวมสูงสุดหลังการนำออกสูงสุด
หากอาร์เรย์อินพุตที่กำหนดคือ {1, 2, 3, -2, 3} ผลรวมของอาร์เรย์ย่อยสูงสุดคือ {2, 3, -2, 3} จากนั้นเราสามารถลบ -2 ได้ หลังจากลบอาร์เรย์ที่เหลือจะกลายเป็น−
{1, 2, 3, 3} โดยมีผลรวม 9 ซึ่งเป็นค่าสูงสุด
อัลกอริทึม
<ก่อน>1. ใช้อัลกอริทึมของ Kadane เพื่อค้นหาผลรวมของอาร์เรย์ย่อยสูงสุด2 เมื่อพบผลรวมแล้ว ให้ใช้อัลกอริทึมของ Kadane อีกครั้งเพื่อค้นหาผลรวมสูงสุดอีกครั้งโดยมีการเปลี่ยนแปลงเล็กน้อย)ตัวอย่าง
#includeใช้เนมสเปซ std;int getMaxSubarraySum(int *arr, int n){ int max =INT_MIN; int ปัจจุบันสูงสุด =0; สำหรับ (int i =0; i ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
ผลรวมสูงสุด =9