Ёжик (3 уровень)

Условие:
План прямоугольного сада размером mxn состоит из квадратных зон. В каждой зоне растёт по дереву. С каждого дерева любой зоны могут упасть несколько яблок.
В левом верхнем квадратике находится ёжик, который должен дойти до правого нижнего квадратика. В саду существуют ограничения относительно способа передвижения: ёжик может двигаться из текущего квадратика только в один из двух соседних правый либо нижний.
Составьте программу, которая вычисляет максимальное количество яблок, которое может собрать ёжик, передвигаясь к нужному квадратику.

Технические условия:
План сада задан таблицей apples содержащей m строк и n столбиков. Элемент apples[i,j] таблицы указывает количество яблок, упавших с дерева в зону с координатами i,j.
Текстовый файл "input.txt" содержит в первой строке числа m,n разделённые пробелом. В каждой из следующих m строк содержится по n чисел apples[i,j] разделённых пробелами.
Файл "output.txt" должен содержать одно натуральное число.

Примеры файлов:

Input.txt

Output.txt

3 3
1 2 3
1 2 3
1 2 3

12

 

Решение: (by Sergey Lungy [_pva3000_@mail.ru])
var apples:array [1..10,1..10] of byte;
    max,s:integer;
    m,n,i,j:byte;
    f:text;

  procedure calc(i,j:byte);
  begin
   s:=s+apples[i,j];
   if i<m then calc(i+1,j);
   if j<n then calc(i,j+1);
   if s>max then max:=s;
   s:=s-apples[i,j];
  end;

BEGIN
  assign(f,'input.txt');
  reset(f);
  read(f,m,n);
  for i:=1 to m do
   begin
    for j:=1 to n do
    read(f,apples[i,j]);
   end;
  close(f);
  calc(1,1);
  assign(f,'output.txt');
  rewrite(f);
  write(f,max);
  close(f);
END.