**Pemrograman dinamis** merupakan suatu teknik matematis yang biasanya digunakan untuk membuat serangkaian keputusan yang saling terkait. Dalam pemrograman dinamis terdapat metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan langkah atau tahapan sedemikiran rupa sehingga solusi permasalahan dapat dilihat dari serangkaian keputusan kecil yang saling terkait.

**Definisi Dinamis**
--------------------

Dalam kamus KBBI, dinamis dijelaskan sebagai penuh semangat juga tenaga. Sehingga, seseorang yang dinamis memiliki kemampuan yang cepat bergerak dan mudah menyesuaikan diri baik dalam hal tertentu maupun dengan lingkungannya. 

Menurut IDS Digital College disebutkan bahwa pemrograman dinamis adalah teknik dalam pemrograman komputer yang membantu memecahkan masalah dalam sebuah bagian secara efisien yang memiliki sub-masalah tumpang tindih dan properti substruktur yang optimal.  Sedangkan dalam terminologi komputer, dinamis berarti "mampu melakukan tindakan atau berubah".

Sistem dinamis dapat menangani fungsionalitas yang lebih rumit dan kompleks dan dapat dilakukan pengembalian yang disesuaikan berdasarkan pengguna, saluran atau aplikasi. Contoh sistem komputer yang bekerja secara dinamis adalah website.

**Cara kerja Program Dinamis dalam ilmu komputer**
--------------------------------------------------

Dua karakteristik dalam pemrograman dinamis :

1. Struktur optimal : Dimana suatu masalah tertentu mempunyai sifat substruktur optimal jika solusi optimalnya dapat diturunkan dari solusi optimal masalahnya.

2. Sub masalah yang tumpang tindih: Yaitu masalah yang harus dapat dipecah menjadi rangkaian submasalah yang dapat digunakan kembali atau algoritma yang dapat menyelesaikan sub masalah berulang kali tanpa menghasilkan submasalah baru. 

  

Dikutip dari tulisan mengenai program ilmu komputer, terdapat beberapa konsep dasar dan karakteristik Program Dinamis yaitu antara lain : 

1) Dekomposisi

Dimana persoalan program dinamis dapat dipecah-pecah menjadi sub-persoalan atau tahapan yang lebih kecil dan berurutan. Setiap tahap disebut juga sebagai titik keputusan. Setiap keputusan yang dibuat pada suatu tahap akan mempengaruhi keputusan-keputusan pada tahap berikutnya.

2) Status

Adalah kondisi awal (Sn) dan kondisi akhir (Sn-1) pada setiap tahap, dimana pada tahap tersebut keputusan dibuat (Dn). Status akhir pada sebuah tahap terrgantung kepada status awal dan keputusan yang dibuat pada tahap yang bersangkutan. Status akhir pada suatu tahap merupakan input bagi tahap berikutnya.

3) Variabel Keputusan dan Hasil

Keputusan yang dibuat pada setiap tahap (Dn) merupakan keputusan yang berorientasi kepada return yang diakibatkannya (Rn|Dn), yaitu tingkat maksimal atau minimal.

4) Fungsi Transisi

Menjelaskan secara pasti bagaimana tahap-tahap saling berhubungan. Fungsi tersebut berbentuk fungsi hubungan antar status pada setiap tahap yang berurutan. Contoh :

Sn-1 = Sn-Dn

Dimana

- Sn-1 = status pada tahap n-1, atau status akhir pada tahap -n

- Sn      = status awal pada tahap -n

5) Optimasi Tahap

adalah bagaimana menentukan keputusan optimal pada setiap tahap dari berbagai kemungkinan nilai status inputnya. 

Fungsi tersebut adalah :

- fn (Sn, Dn) = return pada tahap-n dari nilai status input Sn, dan keputusan Dn

- fn \* (Sn)      = return optiomal pada tahap-n dari nilai input status Sn.

6) Fungsi Rekursif

yang mana biasa digunakan pada berbagai program komputer, dimana nilai sebuah variabel pada fungsi itu merupakan nilai kumulatif dari nilai variabel tersebut.

**Referensi**
-------------

1. ↑  "Kamus Besar Bahasa Indonesia".
2. ↑  "Apa itu pemrograman dinamis".
3. ↑  "Lima Bahasa Pemrograman terpopuler untuk dipelajari di tahun 2021".
4. ↑  [( "What is dynamic programing with examples"] Periksa nilai `|url=` (bantuan).
5. ↑  "Esa Unggul" (PDF).