Məsələdə, verilmiş bütün ardıcıl sıralanmış ədədlər arasında maksimum cəmi olan bir alt ardıcıllığı tapmaq lazımdır. Əgər x_i, x_{i+1}, ..., x_j alt ardıcıllığında maksimum cəm əldə edilərsə, o zaman hər hansı k, 1 \le k < i və l, j < l \le n üçün x_k, ..., x_{i-1} və x_{j+1}, ..., x_l ədədlərinin cəmi mənfi olacaqdır.
Kadanın Alqoritmi. Massivdə soldan sağa doğru hərəkət edirik və dəyişənində cari hissə cəmini toplayırıq. S hər hansı bir anda mənfi olarsa, onu s = 0 olaraq təyin edirik. Massiv üzrə keçid zamanı dəyişəninin bütün qiymətlərinin maksimumu məsələnin cavabı olacaqdır.
Misal
Giriş ardıcıllığı üçün maksimum gəlir -ə bərabərdir.
Misal ardıcıllığını nəzərdən keçirək. Hissə cəmləri qururuq. Cari hissə cəmi mənfi olduqda cəm sıfırlayırıq və növbəti ədəddən etibarən cəmi hesablamağa başlayırıq. Bütün hissə cəmləri içində maksimum qiymət -ya bərabərdir ki, bu da cavabdır. Axtarılan alt ardıcıllıq 4, -2, 4 olacaqdır.
Alqoritmin Təminatı
Ardıcıllığın uzunluğunu oxuyuruq. Maksimum gəlirin və cari hissə cəminin qiymətini sıfırlayırıq.
scanf("%d",&n);
s = 0; max = 0;ədəd oxuyuruq. Hər oxunan ədədini cari cəm -ə əlavə edirik və cari gəlirin qiymətini yenidən hesablayırıq. Əgər hər hansı bir addımda dəyəri mənfiyə çevrilərsə, onu sıfır olaraq təyin edirik və prosesi davam etdiririk.
for(i = 0; i < n; i++)
{
scanf("%d",&Number);
s += Number;
if (s > max) max = s;
if (s < 0) s = 0;
}Nəticəni çıxara bilirik.
printf("%d\n",max);Java Təminatı
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int s = 0, max = 0;
for (int i = 0; i < n; i++)
{
int val = con.nextInt();
s += val;
if (s > max) max = s;
if (s < 0) s = 0;
}
System.out.println(max);
con.close();
}
}Python Təminatı
Ardıcıllığın uzunluğunu oxuyuruq. Maksimum gəlirin max\_profit və cari hissə cəminin qiymətini sıfırlayırıq.
n = int(input())
s = 0
max_profit = 0ədəd oxuyuruq. Hər oxunan ədədini cari cəm -ə əlavə edirik və cari gəlirin max\_profit qiymətini yenidən hesablayırıq. Əgər hər hansı bir addımda dəyəri mənfiyə çevrilərsə, onu sıfır olaraq təyin edirik və prosesi davam etdiririk.
for i in range(n):
Number = int(input())
s += Number
if s > max_profit: max_profit = s
if s < 0: s = 0Nəticəni çıxara bilirik.
print(max_profit)