---
title: "Dynamic programming — การโปรแกรมพลวัต"
source: "https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95"
wiki: "systems-analysis.info/int"
article: "Dynamic_programming_—_การโปรแกรมพลวัต"
language: "th"
categories:
  - "Category:Operations research"
  - "Category:Thai"
revision_id: 1748
wiki_created_at: 2026-09-06T22:53:24Z
wiki_modified_at: 2026-09-06T22:53:24Z
downloaded_at: 2026-09-07T22:47:33Z
---

# Dynamic programming — การโปรแกรมพลวัต

**การโปรแกรมพลวัต** (**DP**; อังกฤษ *dynamic programming, DP*) — คือวิธีการแก้ปัญหาการหาค่าเหมาะสมที่ซับซ้อน โดยอาศัยการแบ่งปัญหาเริ่มต้นออกเป็นลำดับของปัญหาย่อยที่ง่ายกว่า<sup>[\[1\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-bigenc-dp-1)[\[2\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-ru-wiki-dp-2)</sup> วิธีการนี้ประยุกต์ใช้กับกระบวนการตัดสินใจแบบหลายขั้นตอน ซึ่งคำตอบที่ดีที่สุดของปัญหาทั้งหมดสามารถสร้างขึ้นจากคำตอบที่ดีที่สุดของปัญหาย่อยของมัน

คำศัพท์นี้ถูกบัญญัติขึ้นโดยนักคณิตศาสตร์ชาวอเมริกัน Richard Bellman ในช่วงทศวรรษ 1950<sup>[\[3\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-rechetnikov-dp-3)</sup> ในบริบทนี้ คำว่า "programming" ใช้ในความหมายของ "การวางแผน" หรือ "การจัดทำแผนปฏิบัติการที่เหมาะสมที่สุด" มิใช่การเขียนโค้ดคอมพิวเตอร์<sup>[\[4\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-en-wiki-dp-4)</sup>

## คุณสมบัติและทฤษฎีบทสำคัญ

ความสามารถในการประยุกต์ใช้การโปรแกรมพลวัตกับปัญหาหนึ่ง ๆ ถูกกำหนดโดยการมีอยู่ของคุณสมบัติพื้นฐานสองประการ

### หลักการความเหมาะสมของ Bellman

แนวคิดหลักของวิธีการนี้คือ **หลักการความเหมาะสมของ Bellman** (อังกฤษ *Bellman's principle of optimality*) ซึ่งกล่าวว่า ไม่ว่าสถานะเริ่มต้นและการตัดสินใจเริ่มต้นจะเป็นอย่างไร การตัดสินใจในขั้นถัดไปจะต้องประกอบกันเป็นกลยุทธ์ที่เหมาะสมที่สุดเทียบกับสถานะที่ได้มาจากการตัดสินใจครั้งแรก<sup>[\[3\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-rechetnikov-dp-3)</sup>

กล่าวอีกนัยหนึ่ง ส่วนใดก็ตามของเส้นทางที่เหมาะสมที่สุดก็เป็นเส้นทางที่เหมาะสมที่สุดในตัวมันเอง คุณสมบัตินี้ช่วยให้สามารถแบ่งปัญหาโดยรวมออกเป็นลำดับของปัญหาย่อยที่ง่ายกว่าและแก้ได้แบบ recursive

### ปัญหาย่อยที่ทับซ้อนกัน

ปัญหาจะมีคุณสมบัติ **ปัญหาย่อยที่ทับซ้อนกัน** (อังกฤษ *overlapping subproblems*) หากในการแก้ปัญหาแบบ recursive ปัญหาย่อยเดิมเกิดขึ้นซ้ำหลายครั้ง DP ช่วยหลีกเลี่ยงการคำนวณซ้ำโดยการเก็บบันทึกคำตอบของปัญหาย่อยที่พบแล้ว (เทคนิคนี้เรียกว่า memoization หรือ tabulation) ซึ่งเพิ่มประสิทธิภาพได้อย่างมากเมื่อเทียบกับการค้นหาแบบ recursive แบบธรรมดา

## สมการ Bellman

จากหลักการความเหมาะสมจะได้ความสัมพันธ์เวียนเกิดพื้นฐานของวิธีการ ซึ่งเรียกว่า **สมการ Bellman**<sup>[\[1\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-bigenc-dp-1)</sup> มันเชื่อมโยง "มูลค่า" (ผลตอบแทนหรือต้นทุนที่เหมาะสมที่สุด) ของสถานะปัจจุบันกับมูลค่าของสถานะถัดไป ในรูปแบบทั่วไปสำหรับกระบวนการหลายขั้นตอนแบบ deterministic ที่มีฟังก์ชันเป้าหมายแบบ additive มีรูปแบบดังนี้:

$$
V_{k - 1}(x) = \max\limits_{y \in U(x)}\{\varphi_{k}(x,y) + V_{k}(f_{k}(x,y))\}
$$

โดยที่:

- $k$ — หมายเลขขั้นตอน (จาก $m$ ถึง 1);
- $x$ — สถานะของระบบที่ขั้นตอน $k - 1$;
- $y$ — การตัดสินใจที่ควบคุมได้ซึ่งทำในขั้นตอน $k$;
- $\varphi_{k}(x,y)$ — ผลตอบแทน (หรือต้นทุน) ที่ขั้นตอน k;
- $f_{k}(x,y)$ — ฟังก์ชันที่กำหนดสถานะใหม่ของระบบ;
- $V_{k}(s)$ — ค่าเหมาะสมที่สุดของฟังก์ชันเป้าหมายสำหรับปัญหาย่อยที่เริ่มต้นที่ขั้นตอน $k$ ในสถานะ $s$

สมการนี้แก้ตามลำดับ โดยทั่วไปจะแก้ "จากท้าย" โดยเคลื่อนจากขั้นตอนสุดท้ายไปยังขั้นตอนแรก

## ตัวอย่างการประยุกต์ใช้

- **ปัญหาเส้นทางสั้นที่สุดในกราฟ**: ปัญหานี้มีคุณสมบัติโครงสร้างย่อยที่เหมาะสมที่สุด เนื่องจากส่วนใดก็ตามของเส้นทางสั้นที่สุดก็เป็นเส้นทางสั้นที่สุดในตัวเอง อัลกอริทึม Bellman-Ford และ Floyd-Warshall เป็นตัวอย่างคลาสสิกของการประยุกต์ใช้ DP เพื่อแก้ปัญหานี้<sup>[\[5\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-mit-amp-5)</sup>
- **ปัญหากระเป๋าเป้**: ปัญหาการบรรจุกระเป๋าเป้ที่มีความจุจำกัดด้วยสิ่งของที่มีมูลค่าและน้ำหนักต่างกันให้เหมาะสมที่สุด DP ช่วยให้แก้ปัญหานี้ได้โดยพิจารณาสิ่งของทีละชิ้นและคำนวณมูลค่าสูงสุดสำหรับค่าความจุที่เหลือทุกค่าในแต่ละขั้นตอน
- **ปัญหาการจัดสรรทรัพยากร**: การจัดสรรทรัพยากรที่จำกัด (เช่น การลงทุน) ระหว่างโครงการหลายโครงการเพื่อให้ได้ผลรวมสูงสุด

## ข้อจำกัด

ข้อจำกัดหลักของวิธีการนี้คือ **คำสาปแห่งมิติ** (อังกฤษ *curse of dimensionality*) — คำศัพท์ที่ Bellman บัญญัติขึ้นเพื่อบ่งบอกถึงการเพิ่มขึ้นแบบ exponential ของจำนวนสถานะ และด้วยเหตุนี้จึงเพิ่มความซับซ้อนในการคำนวณ เมื่อจำนวนตัวแปรที่อธิบายสถานะของระบบเพิ่มขึ้น<sup>[\[6\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-ru-wiki-curse-6)[\[7\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-utexas-ormm-7)</sup> สิ่งนี้จำกัดการประยุกต์ใช้งานจริงของ DP แบบแม่นยำสำหรับปัญหาที่มีขนาดใหญ่มาก

## แนวคิดที่เกี่ยวข้อง

- การวิจัยเชิงปฏิบัติการ
- ทฤษฎีการควบคุมที่เหมาะสมที่สุด
- กระบวนการตัดสินใจแบบ Markov (การขยายแบบ stochastic)
- สมการ Hamilton–Jacobi–Bellman (สมการแอนะล็อกสำหรับเวลาต่อเนื่อง)

## หมายเหตุ

<sup>[\[1\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-bigenc-dp-1)</sup> <sup>[\[2\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-ru-wiki-dp-2)</sup> <sup>[\[3\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-rechetnikov-dp-3)</sup> <sup>[\[4\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-en-wiki-dp-4)</sup> <sup>[\[5\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-mit-amp-5)</sup> <sup>[\[6\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-ru-wiki-curse-6)</sup> <sup>[\[7\]](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_note-utexas-ormm-7)</sup> \</references\>

1.  <span id="cite_note-bigenc-dp-1">↑ <sup>[1.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-bigenc-dp_1-0)</sup> <sup>[1.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-bigenc-dp_1-1)</sup> <sup>[1.2](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-bigenc-dp_1-2)</sup> "Динамическое программирование". *Большая российская энциклопедия*. <a href="https://bigenc.ru/c/dinamicheskoe-programmirovanie-00423a" class="external autonumber" rel="nofollow">[1]</a></span>
2.  <span id="cite_note-ru-wiki-dp-2">↑ <sup>[2.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-ru-wiki-dp_2-0)</sup> <sup>[2.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-ru-wiki-dp_2-1)</sup> "Динамическое программирование". *Википедия*. <a href="https://ru.wikipedia.org/wiki/Динамическое_программирование" class="external autonumber" rel="nofollow">[2]</a></span>
3.  <span id="cite_note-rechetnikov-dp-3">↑ <sup>[3.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-rechetnikov-dp_3-0)</sup> <sup>[3.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-rechetnikov-dp_3-1)</sup> <sup>[3.2](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-rechetnikov-dp_3-2)</sup> Решетников А. Н., Коченков А. В., Пиров Д. М., Рябоконь Д. А. (2011). *Динамическое программирование. Примеры применения*. Учебное пособие, ННГУ им. Лобачевского (ВМиК). <a href="https://itslearningakarmazyan.files.wordpress.com/2015/09/dynamic-programming.pdf" class="external autonumber" rel="nofollow">[3]</a></span>
4.  <span id="cite_note-en-wiki-dp-4">↑ <sup>[4.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-en-wiki-dp_4-0)</sup> <sup>[4.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-en-wiki-dp_4-1)</sup> "Dynamic programming". *Wikipedia*. <a href="https://en.wikipedia.org/wiki/Dynamic_programming" class="external autonumber" rel="nofollow">[4]</a></span>
5.  <span id="cite_note-mit-amp-5">↑ <sup>[5.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-mit-amp_5-0)</sup> <sup>[5.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-mit-amp_5-1)</sup> Bradley S. P., Hax A. C., Magnanti T. L. (1977). *Applied Mathematical Programming*. Addison-Wesley. <a href="http://web.mit.edu/15.053/www/AMP-Chapter-11.pdf" class="external autonumber" rel="nofollow">[5]</a></span>
6.  <span id="cite_note-ru-wiki-curse-6">↑ <sup>[6.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-ru-wiki-curse_6-0)</sup> <sup>[6.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-ru-wiki-curse_6-1)</sup> "Проклятие размерности". *Википедия*. <a href="https://ru.wikipedia.org/wiki/Проклятие_размерности" class="external autonumber" rel="nofollow">[6]</a></span>
7.  <span id="cite_note-utexas-ormm-7">↑ <sup>[7.0](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-utexas-ormm_7-0)</sup> <sup>[7.1](https://systems-analysis.info/int/Dynamic_programming_%E2%80%94_%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%9E%E0%B8%A5%E0%B8%A7%E0%B8%B1%E0%B8%95#cite_ref-utexas-ormm_7-1)</sup> Jensen P. A. (2004). *Dynamic Programming – Models*. Operations Research Models and Methods, Univ. of Texas. <a href="https://utw11041.utweb.utexas.edu/ORMM/models/unit/dynamic/index.html" class="external autonumber" rel="nofollow">[7]</a></span>
