diff --git a/ru-ru/dynamic-programming-ru.html.markdown b/ru-ru/dynamic-programming-ru.html.markdown
new file mode 100644
index 00000000..0b823b2d
--- /dev/null
+++ b/ru-ru/dynamic-programming-ru.html.markdown
@@ -0,0 +1,66 @@
+---
+category: Algorithms & Data Structures
+name: Dynamic Programming
+contributors:
+ - ["Akashdeep Goel", "http://github.com/akashdeepgoel"]
+ - ["Miltiadis Stouras", "https://github.com/mstou"]
+translators:
+ - ["Albina Gimaletdinova", "https://github.com/albina-astr"]
+lang: ru-ru
+---
+
+# Динамическое программирование
+
+## Введение
+
+Динамическое программирование (dynamic programming, DP) — мощный инструмент для решения определенного класса задач. Идея очень проста: если вы решили задачу для каких-то вводных данных, сохраните этот результат для будущих вычислений, чтобы снова не решать ту же самую задачу с теми же данными.
+
+Запомните!
+«Кто не помнит своего прошлого, обречен на то, чтобы пережить его вновь»
+
+## Способы решения подобных задач
+
+1. *Сверху-вниз*: Начните с разбиения задачи на подзадачи. Если вы видите, что подзадача уже была решена, тогда используйте сохраненный ранее результат. Иначе решите подзадачу и сохраните её результат. Эта техника интуитивно понятна и называется мемоизацией.
+
+2. *Снизу-вверх*: Проанализируйте задачу и определите порядок, в котором решаются подзадачи, и начните решать от тривиальной подзадачи до изначальной задачи. Это гарантирует, что подзадачи будут решены, прежде чем решится вся задача. В этом и заключается динамическое программирование.
+
+## Пример задачи динамического программирования
+
+В задаче по определению самой длинной возрастающей подпоследовательности необходимо найти найти самую длинную возрастающую подпоследовательность для заданной последовательности.
+Для последовательности `S={ a1, a2, a3, a4, ............., an-1, an }` мы должны найти самое длинное подмножество, такое, что для всех `j` и `i`, `j a[j] and LS[i]