Задания
Версия для печати и копирования в MS Word

Дан квад­рат 15 × 15 кле­ток, в каж­дой клет­ке ко­то­ро­го за­пи­са­но целое число. В пра­вом верх­нем углу квад­ра­та стоит робот. За один ход робот может пе­ре­ме­стить­ся на одну клет­ку влево, вниз или по диа­го­на­ли влево вниз. Вы­хо­дить за пре­де­лы квад­ра­та робот не может. Не­об­хо­ди­мо пе­ре­ме­стить ро­бо­та в левый ниж­ний угол так, чтобы сумма чисел в клет­ках, через ко­то­рые прошёл робот (вклю­чая на­чаль­ную и ко­неч­ную), была мак­си­маль­ной. В от­ве­те за­пи­ши­те мак­си­маль­но воз­мож­ную сумму.

Ис­ход­ные дан­ные за­пи­са­ны в элек­трон­ной таб­ли­це.

За­да­ние 18

При­мер вход­ных дан­ных (для таб­ли­цы раз­ме­ром 4 × 4):

 

421−3611
37−12297
−3024−1−5
8−8921

 

Для ука­зан­ных вход­ных дан­ных от­ве­том будет число 79 (робот про­хо­дит через клет­ки с чис­ла­ми 11, 7, 29, 24, 8).

Спрятать решение

Ре­ше­ние.

Найдём мак­си­маль­ную сумму. Для этого найдём мак­си­маль­ную сумму для каж­дой ячей­ки таб­ли­цы. Для каж­дой ячей­ки верх­ней стро­ки это будет сумма всех ячеек спра­ва от те­ку­щей. Для каж­дой ячей­ки пра­во­го столб­ца это будет сумма всех ячеек свер­ху от те­ку­щей. В ячей­ку AE1 за­пи­шем фор­му­лу =СУММ(O1:$O$1). Ско­пи­ру­ем эту фор­му­лу во все ячей­ки в диа­па­зо­не Q1:AD1 и в диа­па­зо­не AE2:AE15. Для осталь­ных ячеек будем срав­ни­вать зна­че­ние ячей­ки спра­ва, зна­че­ние ячей­ки свер­ху и зна­че­ние ячей­ки по диа­го­на­ли спра­ва свер­ху и при­сва­и­вать те­ку­щей ячей­ке зна­че­ние суммы той ячей­ки, в ко­то­рой зна­че­ние боль­ше, и те­ку­щей ячей­ки. В AD2 за­пи­шем фор­му­лу

=МАКС(AD1;AE1;AE2)+N2

и ско­пи­ру­ем эту фор­му­лу во все ячей­ки диа­па­зо­на Q2:AD15. Таким об­ра­зом, в ячей­ке Q15 по­лу­чим зна­че­ние мак­си­маль­ной суммы  — 842.

 

Ответ: 842.

 

При­ведём ре­ше­ние Пащук Ильи на языке Python.

f = open('18.csv')

area = []

maxes = []

for l in f:

w = l.replace('\n','').split(';')

w = list(map(int,w))

area.append(w)

q = [0 for _ in range(len(w))]

maxes.append(q)

f.close()

 

s = 0

for i in range(len(area[0]) - 1, -1, -1):

s += area[0][i]

maxes[0][i] = s

 

s = area[0][-1]

for i in range(1,len(area)):

s += area[i][-1]

maxes[i][-1] = s

 

for x in range(len(area[0]) - 2, -1, -1):

for y in range(1,len(area)):

v = area[y][x]

v1 = maxes[y - 1][x]

v2 = maxes[y][x + 1]

v3 = maxes[y - 1][x + 1]

maxes[y][x] = v + max(v1,v2,v3)

 

print(maxes[-1][0])


Аналоги к заданию № 35476: 35907 Все

Раздел кодификатора ФИПИ: