Динамическое программирование
Антоненко А.С.
2022
Задачи максимизации – максимальная сумма
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
Неправильное решение – жадный алгоритм
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
Шаг 1: Двумерная динамика
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
Шаг 2: Начальные значения
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
1
1+1=2
2+2=4
4+1=5
5+2=7
11
14
19
20
Шаг 2: Рекуррентная формула
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
1
2
4
5
7
11
14
19
20
11+1=12
12+1=13
13+100=113
113+2=115
14+2=16
16+2=18
113+2=115
115+2=117
19+5=24
24+5=29
115+7=122
122+7=129
24+1=25
29+1=30
122+7=129
129+10=139
Шаг 3: Решение
M[0][0] = A[0][0]
for (i = 1 … N - 1)
M[i][0] = M[i-1][0] + A[i][0]
for (j = 1 … K - 1)
M[0][j] = M[0][j-1] + A[0][j]
for (i = 1 … N - 1)
for (j = 1 … K - 1)
M[i][j] = max(M[i-1][j],M[i][j-1])� + A[i][j]
Ответ: M[N-1][K-1]
Шаг 4: Восстановление пути
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
1
2
4
5
7
11
14
19
20
12
13
113
115
16
18
115
117
24
29
122
129
25
30
129
139
Вариации – максимальная сумма и количество способов её получить
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
Двумерная динамика
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
Начальные значения
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
1
1+1=2
2+2=4
4+1=5
5+2=7
11
14
19
20
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Шаг 2: Рекуррентная формула
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
1
2
4
5
7
11
14
19
20
11+1=12
12+1=13
13+100=113
113+2=115
14+2=16
16+2=18
113+2=115
115+2=117
19+5=24
24+5=29
115+7=122
122+7=129
24+1=25
29+1=30
122+7=129
129+10=139
Вариации – максимальная сумма - идем из левого столбца в правый
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |
L-R динамика. �Максимальный подпалиндром
L-R динамика. �Максимальный подпалиндром
А
К
И
Т
А
М
Е
Т
А
М
А
К
И
Т
А
М
Е
Т
А
М
L\R
Вариации – максимальная сумма - идем из левого столбца в правый
1 | 1 | 2 | 1 | 2 |
10 | 1 | 1 | 100 | 2 |
3 | 2 | 2 | 2 | 2 |
5 | 5 | 5 | 7 | 7 |
1 | 1 | 1 | 7 | 10 |