рд╣рдмрд░ рдкрд░ рдЙрдЪреНрдЪ рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ
рд╕рдкреНрддрд╛рд╣ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬреЛ рдХрд╛рдо рдХреЗ рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ рд╣реИ, (рдЗрд╕рд▓рд┐рдП рд╕рдореНрдорд╛рдирд┐рдд
рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░рд▓реАрди рджреНрд╡рд╛рд░рд╛ рдЗрдирдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рд╕реАрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
habzzov рдПрд▓реЗрдХреНрд╕рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдЪрд╛рд░рд┐рдд)ред

рдФрд░ рдореИрдВ рдЖрдкрдХреЛ
Acceler8 рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдмрддрд╛рдКрдВрдЧрд╛ ред рд╣рд╛рдВ, рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рди рдХреЗрд╡рд▓
рд╕реАрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдмрд▓реНрдХрд┐ "рдЫреЛрдЯреЗ" рдкреБрд░рд╕реНрдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП
рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ:
2 рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реИрдкрдЯреЙрдк рдПрдЪрдкреА рдФрд░ 10 рдПрд╕рд╕ рдиреЗрдЯрдмреБрдХ ред
рдЕрдкрдиреЗ рд╣рд╛рде рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЗрд╕ рдмрд╛рд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ рд╕рдВрднрд╡рддрдГ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреЛ рд╣рдо рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдореВрд▓реНрдпреЛрдВ рдХреЗ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рд╕рднреА рдЙрдкрдорд╛рддреНрд░рд╛рдУрдВ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдзрд┐рдХрддрдо рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рдмрдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк
рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдкреГрд╖реНрда рдкрд░ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдлреИрд╕рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдЕрдиреБрдХреНрд░рдорд┐рдХ рдорд╛рдереЗ рдЦреЛрдЬ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрдЧрд╛:
int maxSum = A[0][0]; int maxI0 = 0, maxJ0 = 0, maxI1 = 1, maxJ1 = 1; for (int i = 0; i < M; i++) for (int j = 0; j < N; j++) for (int width = 1; width <= M - i; width++) for (int height = 1; height <= N - j; height++) { int currentSum = sum_subarray(A, i, j, i + width, j + height); if (currentSum > maxSum) { maxSum = currentSum; maxI0 = i; maxJ0 = j; maxI1 = i + width - 1; maxJ1 = j + height - 1; } } cout << "Max subarray: [" << maxI0 << "][" << maxJ0 << "] .. [" << maxI1 << "][" << maxJ1 << "]"; cout << endl << "Max value = " << maxSum << endl; cout << "Area = " << (maxI1 - maxI0 + 1) * (maxJ1 - maxJ0 + 1) << endl;
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг "рд╕рднреА рдорд╣рд╛рдХрд╛рд╡реНрдп рдореЗрдВ рдирд╣реАрдВ рд╣реИред"
рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдлреИрд╕рд▓рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред
рд╣рдо рд╕рднреА рдХрд╛рд░реНрдб рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЕрдм рд╕рдм рдХреБрдЫ рдПрдХ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╣реИ - рдПрдХ рдорд╣реАрдиреЗ рдХрд╛ рд╕рдордп (рдирд┐рд░реНрдгрдп 15 рдирд╡рдВрдмрд░ рддрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ) рдФрд░ Google рдФрд░ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХреЛрдВ рддрдХ рдореБрдлреНрдд рдкрд╣реБрдВрдЪред
рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдФрд░ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ - рдПрдХ рдирд╛рд╢реНрддреЗ рдХреЗ рд▓рд┐рдПред
рд╣рдо рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ?
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░
рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рдврд╝ рдЖ рд░рд╣реА рд╣реИред рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рднреА:
рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╣рд▓рд╛ рд╣реИ
рдорд╛рдирджрдВрдб рдкрд░реАрдХреНрд╖рдг рд▓реИрдм 40-рдХреЛрд░ рдорд╢реАрди, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдкреНрд░реЛрд╕реЗрд╕рд░ рдмреНрд░рд╛рдВрдб рдФрд░ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЖрдХрд╛рд░ ("
рдПрдордЯреАрдПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдЦреЗрдВ")ред рджреВрд╕рд░рд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд┐рд╕реНрдЯрдо рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ (2-4 рдХреЛрд░, рдореЗрдореЛрд░реА рдХреЗ рдХрдИ рдЧрд┐рдЧреНрд╕ - рдпрд╣ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА)ред
рдХреНрдпрд╛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рд╣рд╛рдВред
рджреВрд╕рд░реА рдУрд░ - рдЖрдк "рдЫреЛрдЯреА рдорд╢реАрди" рдФрд░ MTL рдкрд░ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдЬреАрддрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рджреЛрдиреЛрдВ рдорд╢реАрдиреЛрдВ рдкрд░ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛? рдпрд╣ рд╕рдордп рджрд┐рдЦрд╛рдПрдЧрд╛ред
рддреЛ, рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рд▓рд┐рдВрдХ:
рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг ред рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╡рд╛рд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛
рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдордВрдЪ рдкрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░, рд╡рд╣,
рдорд╣рд╛рдХрд╛рд╡реНрдп рд╣реЛ ! ;)